高併發多線程知識點

1.併發線程的3個特性

(1)原子性問題:如果多個線程共用共享資源,那麼會出現資源被修改,但是其他線程拿不到最新的值,這時候可以用volatile(對其他線程可見和防止指令重排序,但是不能保證原子性,沒辦法實現線程同步)解決

(2)可見性問題:有些變量比如 i++,就不能用volatile,只能用同步鎖  synchronized(可以解決原子性,有序性,可見性,但是不適用高併發,影響性能),單個線程自己獨享。

(3)有序性問題:用JMM規範去解決多線程順序的問題

2.java可以用內存屏障來解決編譯器重排序的問題

3.volatile應用場景

   線程執行run()的時候我們需要在線程中不停的做一些事情,比如while循環,那麼這時候該如何停止線程呢?如果線程做的事情不是耗時的,那麼只需要使用一個標誌即可。如果需要退出時,調用setStop()即可。這裏就使用了關鍵字volatile,這個關鍵字的目的是如果修改了isStop的值,那麼在while循環中可以立即讀取到修改後的值。

這裏如果用volatile關鍵字對inited變量進行修飾,就不會出現這種問題了。

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章