synchronized 是Java语言内置的一个关键字,用于实现线程间的同步控制。通过使用synchronized关键字,可以保证在同一时刻只有一个线程可以执行特定的代码段,从而避免多线程环境下数据竞争的问题。
synchronized 的主要用法有三种:
- 同步实例方法:将
synchronized关键字放在实例方法的声明上,意味着这个方法只能被一个线程访问,其他试图访问该方法的线程将会被阻塞直到第一个线程完成方法的执行。 - 同步静态方法:当
synchronized关键字应用于静态方法时,锁住的是这个类的所有对象。也就是说,对于该类的所有实例,该静态方法在同一时刻只能被一个线程访问。 - 同步代码块:你可以使用
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,可以有效地避免多线程环境下的数据不一致问题。
79

被折叠的 条评论
为什么被折叠?



