教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

synchronized和volatile的区别是什么?

更新时间:2023年05月19日10时11分 来源:传智教育 浏览次数:

好口碑IT培训

  在多线程编程中,synchronized和volatile是两个关键字,用于确保多个线程之间的可见性和顺序性。它们的作用和使用场景有所不同。

  1.synchronized关键字:

  ·synchronized关键字用于实现线程之间的互斥同步,保证同一时刻只有一个线程可以执行被synchronized修饰的代码块或方法。

  ·synchronized关键字可以用于修饰代码块或方法,也可以用于修饰静态方法或类。

  当一个线程获得了对synchronized代码块或方法的锁定,其他试图访问该代码块或方法的线程将被阻塞,直到该线程释放锁定。

synchronized和volatile的区别是什么

  ·synchronized关键字保证了原子性、可见性和有序性。

  下面是一个使用synchronized关键字的简单示例:

public class SynchronizedExample {
    private int count = 0;

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

  2.volatile关键字:

  ·volatile关键字用于标记变量,确保多个线程之间对变量的修改可见。

  ·当一个线程修改了volatile变量的值,该值会立即被写入主内存,而不是被缓存到线程的本地内存。

  ·当其他线程需要读取该变量时,它们会从主内存中读取最新的值,而不是使用缓存的旧值。

  ·volatile关键字只提供了可见性的保证,并不保证原子性。

  下面是一个使用volatile关键字的简单示例:

public class VolatileExample {
    private volatile int count = 0;

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

  需要注意的是,volatile关键字适用于某个变量在多个线程之间进行简单的读取和写入操作,并不能代替synchronized关键字来实现复杂的互斥同步逻辑。

  总结:

  ·synchronized关键字用于实现互斥同步,保证同一时刻只有一个线程可以执行同步代码块或方法,同时提供了原子性、可见性和有序性的保证。

  ·volatile关键字用于确保多个线程之间对变量的修改可见,但并不提供互斥同步的功能,也不保证原子性。

0 分享到:
和我们在线交谈!