jdk5開始新增了兩種鎖機制:reentrantreadwritelock和reentrantlock。
對於reentrantreadwritelock鎖機制:
1、重入方面其內部的writelock可以獲取readlock,但是反過來readlock想要獲得writelock則永遠都不要想。
2、writelock可以降級為readlock,順序是:先獲得writelock再獲得readlock,然後釋放writelock,這時候執行緒將保持readlock的持有。反過來readlock想要公升級為writelock則不可能。
3、readlock可以被多個執行緒持有並且在作用時排斥任何的writelock,而writelock則是完全的互斥。這一特性最為重要,因為對於高讀取頻率而相對較低寫入的資料結構,使用此類鎖同步機制則可以提高併發量。
4、不管是readlock還是writelock都支援interrupt,語義與reentrantlock一致。
5、writelock支援condition並且與reentrantlock語義一致,而readlock則不能使用condition,否則丟擲unsupportedoperationexception異常。
class cacheddata
// downgrade by acquiring read lock before releasing write lock
rwl.readlock().lock();
rwl.writelock().unlock(); // unlock write, still hold read
} use(data);
rwl.readlock().unlock();
}}
jdk5的執行緒池
接上篇 url 繼續討論執行緒池 jdk5也提供了執行緒池 而且非常簡單 code executorservice pool executors.newfixedthreadpool 4 建立執行緒池 4個工作執行緒 pool.execute new runnabletask 向任務佇列新增任務,任...
JDK5新特性之執行緒鎖技術(二)
一.lock實現執行緒同步互斥 lock比傳統執行緒模型中的synchronized方式更加物件導向,與生活中的鎖類似,鎖本身也是乙個物件。兩個執行緒執行的 片段要實現同步互斥的效果,他們必須用同乙個lock物件。鎖是上在代表要操作的資源的類的內部方法中,而不是執行緒 中。public class ...
JDK5新特性 列舉
一些程式在執行時,他需要的資料不能是任意的,而必須是一定範圍內的值,jdk5以前採用自定義類來解決,jdk5以後可以直接採用列舉解決。在jdk5之後,使用enum關鍵字定義一種新的型別,稱為列舉型別。enum類和enum關鍵字 使用enum關鍵字定義的列舉類,實際上就相當於定義了乙個類,此類繼承了e...