天天看點

Java 8新特性探究(十)StampedLock将是解決同步問題的新寵

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