1. 程式人生 > 資訊 >360 上線“番茄快搜”App,主打極簡搜尋

360 上線“番茄快搜”App,主打極簡搜尋

1.volatile是什麼?

  volatile是java虛擬機器提供的輕量級的同步機制,具有如下特性:

  a.保證可見性

  b.不保證原子性

  c.禁止指令重排

2.JMM記憶體模型?

  JMM——https://www.cnblogs.com/zhouxuezheng/p/14950302.html

3.volatile的可見性程式碼驗證:

  主執行緒中判斷資源類Cache中的變數a的值是否為0,如果為0則一直死迴圈。新開的執行緒A會在2秒鐘後去改變Cache中a的值,但是主執行緒不能及時獲取到a的最新值從而一直死迴圈,程式並不會在2秒鐘結束。即執行緒A中對Cache中a的修改對main執行緒而言不可見 。如果在變數a上新增volatile關鍵字,程式就可在2秒後就可正常退出。注意:如果在while程式碼塊中有System.out.println();程式也會在2秒後正常退出,這是因為System.out.println()方法底層有synchronized關鍵字,這會導致main執行緒強制獲取主存中的資料。

class Cache{
    int a = 0;
    public void setA() {
        a = 2;
    }
}
public class VolatileDemo {
    public static void main(String[] args) {
        Cache cache = new Cache();
        new Thread(() -> {
            try { Thread.sleep(2000); } catch (InterruptedException e) {}
            cache.setA();
        }, 
"執行緒A").start(); while (cache.a == 0) { } } }