多執行緒三大特性
- 原子性
- 可見性
- 有序性
- 常見歸問提
- 并行與并發
- 執行緒與行程

原子性
原子性就是指操作不可分割,所有操作要么全部執行完成,要么全部執行失敗,類比資料庫原子性,資料庫事務參考:資料庫事務學習
使用synchronize/lock解決
可見性
可見性指的是當一個執行緒修改了某個共享變數的值,其他執行緒是否能夠馬上得知這個修改的值,例如執行緒1修改了A執行緒2是否立馬感知,
通過volatile/synchronize/lock解決
public class Test2_Visibility{
public boolean additivity = false;//解決方案1:這里加volatile 修飾變數
public static void main(String[] args) {
Test2_Visibility t = new Test2_Visibility();
// ReentrantLock lock = new ReentrantLock();解決方案3:用lock鎖
new Thread(new Runnable() {
@Override
public void run() {
//解決方案2:加synchronized鎖解決
t.additivity = true;
System.out.println(Thread.currentThread().getName() + "修改后的值" + t.additivity);
}
}, "cc百川1").start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (t.additivity) {
break;
}
}
System.out.println(Thread.currentThread().getName() + "訪問公共變數" + t.additivity);
}
}, "cc百川2").start();
}
}

有序性
有序性是指代碼在運行期間保證和代碼的順序一致,但實際上在執行程序中會進行指令重排序,
通過volatile/synchronize/lock解決
指令重排序的作用有,盡量讓資料填充滿(記憶體資源很可貴,不要無意義使用)快取行(默認64byte),提供作業效率,

圖中對b的修改無意中導致a可見
常見歸問提
并行與并發
并行:指多個處理器,或者多核處理器同時處理多個任務,
并發:指多個任務在同一個cpu核上交替執行,每一個執行時間較短看起來像一起執行的結果,

執行緒與行程
行程:資源分配的最小單位,可以有多個執行緒,有獨立的地址空間,行程與行程相互獨立,
執行緒:程式執行的最小單位,執行緒共享行程的資料,執行緒切換代價比行程代價小,執行緒影響行程內的其他執行緒,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271523.html
標籤:其他
