-
用法说明
Volatile关键字作用的对象是类的属性变量。
而且针对的是单个线程的写,多个线程的读。
所以不适合多个线程同时对一个类属性变量的写操作。 -
举例说明
public class TestVolatile { static class MyVolatileRunnable implements Runnable { private static volatile int value = 10; private static volatile boolean isLoop = false; @Override public void run() { String threadName = Thread.currentThread().getName(); System.out.println(threadName +": 打印value的值: " + value); try { Thread.sleep(2000); while (!isLoop); System.out.println("Loop ended!.... flag isLoop : " + isLoop); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { MyVolatileRunnable myVolatileRunnable = new MyVolatileRunnable(); for (int i = 0; i < 3; i++) { new Thread(myVolatileRunnable).start(); } MyVolatileRunnable.value = 11; System.out.println("MyVolatileRunnable.value: " + MyVolatileRunnable.value); MyVolatileRunnable.isLoop = true; System.out.println("main ended......"); } }
-
TestVolatile 类的讲解
private static volatile boolean isLoop = false;
isLoop变量控制着子线程中while循环是否结束。
如果没有在主线程中对isLoop变量进行赋值为true操作,
子线程的while循环时不会结束的,
「Loop ended!.. flag isLoop : true」这句话是不会被输出 的。 -
运行结果 :
MyVolatileRunnable.value: 11
Thread-0: 打印value的值: 11
Thread-2: 打印value的值: 11
Thread-1: 打印value的值: 11
main ended…
Loop ended!.. flag isLoop : true
Loop ended!.. flag isLoop : true
Loop ended!.. flag isLoop : true
Volatile关键字的用法
最新推荐文章于 2024-01-26 19:15:17 发布