Synchronized 有哪几种用法?思维导图 代码示例(java 架构)

synchronized 是Java语言内置的一个关键字,用于实现线程间的同步控制。通过使用synchronized关键字,可以保证在同一时刻只有一个线程可以执行特定的代码段,从而避免多线程环境下数据竞争的问题。

synchronized 的主要用法有三种:

  1. 同步实例方法:将synchronized关键字放在实例方法的声明上,意味着这个方法只能被一个线程访问,其他试图访问该方法的线程将会被阻塞直到第一个线程完成方法的执行。
  2. 同步静态方法:当synchronized关键字应用于静态方法时,锁住的是这个类的所有对象。也就是说,对于该类的所有实例,该静态方法在同一时刻只能被一个线程访问。
  3. 同步代码块:你可以使用synchronized关键字来同步代码块,这允许你更细粒度地控制哪些部分需要同步。锁可以是任何对象,通常选择一个不会被外部代码访问的对象作为锁,以减少死锁的风险。

思维导图(文字描述)

synchronized 关键字
├── 同步实例方法
│   └── 作用于对象实例
├── 同步静态方法
│   └── 作用于整个类
└── 同步代码块
    ├── 自定义锁对象
    └── 更细粒度的同步控制

Java代码示例

同步实例方法示例
public class Counter {
    private int count = 0;

    // 同步实例方法
    public synchronized void increment() {
        count++;
    }

    // 同步实例方法
    public synchronized void decrement() {
        count--;
    }

    // 同步实例方法
    public synchronized int getCount() {
        return count;
    }
}
同步静态方法示例
public class Counter {
    private static int count = 0;

    // 同步静态方法
    public static synchronized void increment() {
        count++;
    }

    // 同步静态方法
    public static synchronized void decrement() {
        count--;
    }

    // 同步静态方法
    public static synchronized int getCount() {
        return count;
    }
}
同步代码块示例
public class Counter {
    private int count = 0;
    private final Object lock = new Object(); // 自定义锁对象

    public void increment() {
        synchronized (lock) {
            count++;
        }
    }

    public void decrement() {
        synchronized (lock) {
            count--;
        }
    }

    public int getCount() {
        synchronized (lock) {
            return count;
        }
    }
}

以上示例展示了如何在不同场景下使用synchronized关键字来实现线程同步。通过合理使用synchronized,可以有效地避免多线程环境下的数据不一致问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值