/**
* @author xty
* @description
* @date 19:31 2018/11/12
*/public class counter
}catch (exception e )
}}
/**
* @author xty
* @description
* @date 19:33 2018/11/12
*/public class test
}).start();
new thread(new runnable()
}).start();
new thread(new runnable()
}).start();
}}
新建兩個類,執行之後總數並沒有到3*200 ,因為產生了併發問題。
解決方法1.
/**
* @author xty
* @description
* @date 19:31 2018/11/12
*/public class counter
}catch (exception e )
}}
雖然結果對了,但是使用了synchronized 效率極其低下。
解決方法2.
/**
* @author xty
* @description
* @date 19:31 2018/11/12
*/public class counter
}}catch (exception e )
}}
將synchronized加入到關鍵部位(競爭條件),效率有所提公升。
解決方法3.
/**
* @author xty
* @description
* @date 19:31 2018/11/12
*/public class counter
}catch (exception e )
}}
使用atomicinteger 類。輸出順序並沒***,但是最後的結果是正確的。因為排隊效率會低。
乙個執行緒獲取它本生已經持有的鎖,這是可以成功的。我們知道多個執行緒同時搶占同乙個鎖它們是失敗的。因為它們之間是互斥的。但是呢,乙個執行緒再次獲取乙個自己已經拿過的鎖是可以成功的,那麼它是能夠成功的。
public class widget
}
public class childwidget extends widget
}
public class test
}
子類和父類呼叫的鎖都是w這個物件,因此這種方式叫做內部鎖的可重入機制,也叫可重入鎖。 Java併發學習筆記(1) 併發程式設計基礎
執行緒的狀態 new 初始狀態,執行緒被new 出來,但還沒start 的狀態 runnable 指的是呼叫了start 方法,但還在等著cpu資源的狀態 running 乙個執行緒獲得了cpu資源,正在走的狀態 terminated 執行緒物件的run 方法走完了的狀態 blocked 執行緒被阻...
Java高併發程式設計學習筆記1
執行緒的runnable狀態 已經具備執行條件,只等待cpu排程 萬事俱備只欠東風 1 thread類中得start方法啟動乙個執行緒,並且該執行緒進入了可執行態 runnabel 2 run方法和start方法的區別。3 線 正的執行邏輯在run方法中,通常我們把run方法稱為執行緒的執行單元。重...
併發程式設計學習筆記
併發程式設計第2章,基礎篇 2.1執行緒安全 1併發程式設計即是要控制對共享的可變的變數的訪問操作順序 2保證同步的方法,在語法 級別來說,可以使用synchronized,volatile,或者是現式的鎖,或者使用原子變數 3好的設計是避免執行緒危險的良方,使用oo的方法盡量避免執行緒的隱患。4執...