synchronized 和 Lock 都是 Java 中用于实现线程同步的机制,它们都可以保证线程安全。
# synchronized 介绍与使用
synchronized 可用来修饰普通方法、静态方法和代码块,当一个线程访问一个被 synchronized 修饰的方法或者代码块时,会自动获取该对象的锁,其他线程将会被阻塞,直到该线程执行完毕并释放锁。这样就保证了多个线程对共享资源的操作的互斥性,从而避免了数据的不一致性和线程安全问题。 synchronized 基本使用如下:
public class SynchronizedDemo {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
此时我们再使用多线程调用上面类的 increment 或 getCount 时,就不会出现线程安全问题了,如下代码所示:
public class SynchronizedDemoTest {
public static void main(String[] args) {
SynchronizedDemo demo = new SynchronizedDemo();
Runnable r = () -> {
for (int i = 0; i <