java8就像一個寶藏,一個小的api改進,也足與寫一篇文章,比如同步,一直是多線程并發程式設計的一個老話題,相信沒有人喜歡同步的代碼,這會降低應用的吞吐量等性能名額,最壞的時候會挂起當機,但是即使這樣你也沒得選擇,因為要保證資訊的正确性。是以本文決定将從synchronized、lock到java8新增的stampedlock進行對比分析,相信stampedlock不會讓大家失望。
在java5之前,實作同步主要是使用synchronized。它是java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。
有四種不同的同步塊:
執行個體方法
靜态方法
執行個體方法中的同步塊
靜态方法中的同步塊
大家對此應該不陌生,是以不多講了,以下是代碼示例
``
synchronized(this)
// do operation
}
rwlock.writelock().lock();
try {
} finally {
rwlock.writelock().unlock();
class point {
private double x, y;
private final stampedlock sl = new stampedlock();
void move(double deltax, double deltay) { // an exclusively locked method
//下面看看樂觀讀鎖案例
double distancefromorigin() { // a read-only method
//下面是悲觀讀鎖案例
void moveifatorigin(double newx, double newy) { // upgrade