1. 程式人生 > >多線程7---volatile關鍵字,刷新線程工作空間內存到主內存中去,即保持同步

多線程7---volatile關鍵字,刷新線程工作空間內存到主內存中去,即保持同步

方法 alt none 技術 isp sys ecc false vol

1. 改成static也不行 private static boolean isRunning = true; volatile關鍵字主要用於線程變量在多個線程之間的可見

技術分享圖片
 1 public class RunThread extends Thread{
 2     private volatile  boolean isRunning = true;
 3     public void setRunning(boolean isRunning) {
 4         System.out.println(Thread.currentThread().getName()+"線程setRunning");
5 this.isRunning = isRunning; 6 } 7 8 public void run(){ 9 System.out.println(Thread.currentThread().getName()+"進入run方法..."); 10 while(isRunning) { 11 //System.out.println(Thread.currentThread().getName()+"線程isRunning"); 12 } 13 System.out.println(Thread.currentThread().getName()+"線程終止");
14 } 15 16 public static void main(String[] args) throws Exception { 17 RunThread rt = new RunThread(); 18 rt.start(); 19 Thread.sleep(3000); 20 rt.setRunning(false); 21 System.out.println(Thread.currentThread().getName()+"線程isRunning值被設置成false"); 22 Thread.sleep(100);
23 System.out.println(Thread.currentThread().getName()+"::"+rt.isRunning); 24 } 25 /* 不加volatile關鍵字, 主內存中的isRunning不會被刷新,永遠都是true.所以線程不會終止,加了會把rt線程的工作內存變量刷新到主內存 26 * Thread-0進入run方法... 27 main線程setRunning 28 main線程isRunning值被設置成false 29 main::false 30 */ 31 }
View Code

多線程7---volatile關鍵字,刷新線程工作空間內存到主內存中去,即保持同步