java synchronized

本文深入探讨Java中线程同步的基本概念与实现方法。详细介绍了synchronized关键字如何确保线程安全,避免线程冲突及内存一致性异常。并通过示例说明synchronized方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程的通信主要是通过共享数据域和对象的引用域。这种通信方法是很高效的,但同时也有可能造成两种错误:线程冲突和内存一致性异常,用来解决这种问题的工具就是synchronization这个机制。

java程序提供两个基本的Synchronized语法,Synchronized方法和Synchronized表达式;

要让一个java方法具有Synchronized性,在声明时加上Synchronized修饰符即可

public class SynchronizedCounter {
    private int c = 0;

    public synchronized void increment() {
        c++;
    }

    public synchronized void decrement() {
        c--;
    }

    public synchronized int value() {
        return c;
    }
}

比如counter是SynchronizedCounter的一个实例,那么它的Synchronized方法具有两个特性:

1.两个实现了Synchronized的方法就不会再交替运行;当一个对象的Synchronized方法被一个线程调用执行,那么其他的线程要执行这个对象的这个方法就会被阻塞(暂停执行)

2.当一个Synchronized存在时,就会在同一个对象为synchronize方法在后续的调用中自动建立happen-befor关系。这保证了在同一对象的状态对每个线程都是可见的。

构造方法是不能用synchronized修饰的,否则会导致语法错误。这是因为一个对象只有被构造完成之后才能让synchronized调用方法。
synchronize是最简单的方法用来解决并行问题,但是同时也会造成活跃性的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值