Java中如何正确使用Volatile关键字实现线程安全?
- 内容介绍
- 文章标签
- 相关推荐
本文共计872个文字,预计阅读时间需要4分钟。
在原子性、可见性和有序性中,volatile关键字主要在可见性中发挥重要作用。volatile声明的变量对所有线程都是可见的。这意味着当线程修改了这个变量的值,其他线程将立即看到这个值的变化。简单来说,就是当变量的值发生变化时,其他线程可以立即发现这个变化。
在原子性、可见性、有序性中,volatile关键字主要在可见性中发挥作用。
volatile声明的变量对所有线程来说是可见的,就是说当变量的值发生改变的时候,其他线程可以立马发现这个变化。
public class Main { private static boolean isRuning; private static int number; private static class ReaderThread extends Thread { public void run() { while (!isRuning) { System.out.println(number); } } } public static void main(String[] args) throws InterruptedException { new ReaderThread().start(); Thread.sleep(1000); number = 42; isRuning = true; Thread.sleep(1000); } }
应该是由于编译器优化的存在,这里变量虽然没有被volatile修饰,但是仍然对其他线程可见。。。。。
本文共计872个文字,预计阅读时间需要4分钟。
在原子性、可见性和有序性中,volatile关键字主要在可见性中发挥重要作用。volatile声明的变量对所有线程都是可见的。这意味着当线程修改了这个变量的值,其他线程将立即看到这个值的变化。简单来说,就是当变量的值发生变化时,其他线程可以立即发现这个变化。
在原子性、可见性、有序性中,volatile关键字主要在可见性中发挥作用。
volatile声明的变量对所有线程来说是可见的,就是说当变量的值发生改变的时候,其他线程可以立马发现这个变化。
public class Main { private static boolean isRuning; private static int number; private static class ReaderThread extends Thread { public void run() { while (!isRuning) { System.out.println(number); } } } public static void main(String[] args) throws InterruptedException { new ReaderThread().start(); Thread.sleep(1000); number = 42; isRuning = true; Thread.sleep(1000); } }
应该是由于编译器优化的存在,这里变量虽然没有被volatile修饰,但是仍然对其他线程可见。。。。。

