Java多執行緒系列(二) 執行緒安全

2021-08-09 08:53:38 字數 590 閱讀 9339

個人主頁:tuzhenyu』s page

多執行緒併發操作下可能出現記憶體不可見問題,指令重排序問題,4位元組賦值問題等,主要造成執行緒不安全的還是記憶體不可見和指令重排序;

非執行緒安全出現的情況主要是多執行緒同時對乙個共享可變變數進行讀寫操作,因此可以通過以下三種方法解決非執行緒安全問題:

將可變變數修改為不可變變數,如用final修飾符

在訪問時使用執行緒同步,如volatile,synchronized等

記憶體屏障

記憶體屏障的種類:storestore屏障,storeload屏障,loadstore屏障,loadload屏障

lock不是一種記憶體屏障,但是它能完成類似記憶體屏障的功能,算是一種粗顆粒度的記憶體屏障,會禁止屏障兩邊所有重排序;

保守策略下,volatile關鍵字細顆粒度記憶體屏障

volatile關鍵字語義的實現

volatile關鍵字語義的實現是通過lock字首,反編譯會發現在volatile關鍵字修飾的變數寫操作前有lock字首修飾,lock字首相當於是粗顆粒度的記憶體屏障,主要提供三個功能:

synchronized的使用

synchronized語義的實現

鎖重入:

java多執行緒 二 執行緒的互斥

多執行緒相對於單執行緒而言,大大的提高了硬體cpu的使用率,提高了處理的速度。任何事物帶來的都是兩面性的,多執行緒為我們帶來效能提高的同時也帶來了許多的安全性問題。說互斥之前,先說一下什麼是互斥,舉個列子,一天去atm機取錢,如果沒有互斥的話,你正取著錢突然有個人衝進來把你的錢搶走了。這時候你想,要...

多執行緒 二 執行緒的安全隱患

有了多執行緒就有了資源競爭,當多個執行緒對同一資源進行操作時就容易出現安全隱患。下面舉乙個賣票的例子來說明執行緒的安全隱患12 3456 78910 1112 1314 1516 1718 1920 2122 2324 2526 2728 2930 3132 3334 3536 3738 3940 ...

多執行緒系列(二) 執行緒的建立方式

多執行緒建立方式有三種,一種是繼成thread類 一種是實現runnable介面 一種是使用callable介面和future介面組合,它和runnable介面方式的區別是前者的run方法返回void,後者可以返回執行緒中儲存的值 一般採用執行緒池來建立執行緒,這個在後續寫執行緒池的時候再寫。aut...