Java集合框架的線程安全.docx
《Java集合框架的線程安全.docx》由會員分享,可在線閱讀,更多相關(guān)《Java集合框架的線程安全.docx(4頁珍藏版)》請在匯文網(wǎng)上搜索。
1、Java集合框架的線程平安周慶岳 Java集合框架是由Java平臺標(biāo)準(zhǔn)版1.2 Java SE 1.2引入的通用數(shù)據(jù)結(jié)構(gòu)與算法框架。其靈活的面對對象設(shè)計受到了廣闊Java程序員的一致青睞,為Java平臺的成熟奠定了堅實的根底。一個集合也稱容器是指將一組元素組合成一個單元的簡單對象。集合用于存儲、取回、操作和傳遞這些聚合的元素。集合框架是指一個統(tǒng)一的用來表示和操作集合的體系結(jié)構(gòu)Bloch,1999。最簡單的集合如數(shù)組、列表和隊列等,集合框架最著名的例子如C+ 標(biāo)準(zhǔn)庫STL。 線程平安不是一個全有或全無的問題,難以對其進行精確的定義。線程平安籠統(tǒng)地講是指程序在多線程環(huán)境下運行時的正確性。Java集
2、合框架的設(shè)計者Bloch Joshua在他著名的?Java高效編程?一書中對Java線程平安的等級做出了相對精確的定義Bloch,2001:非可變、線程平安、條件線程平安、線程兼容和線程不友好。本文將結(jié)合上述Bloch關(guān)于線程平安等級的定義,對Java集合框架中的集合類進行線程平安性分析, 并指出各個集合類在現(xiàn)實的編程環(huán)境中需要注意的并發(fā)編程的陷阱;同時對集合框架中通用算法對線程平安性的影響進行分析。所涉及的集合類不僅包括Java SE 1.2引入的集合類,還包括舊集合類Java SE 1.2前引入和新集合類Java SE 5引入。從而幫助Java程序員在進行并發(fā)編程時更加高效地利用Java集
3、合框架。Java線程平安的等級定義根據(jù)Bloch的定義,將線程平安分為五個等級,下面將給出這五個等級的描述和局部例如。1、非可變?nèi)绻粋€類的所有實例對于調(diào)用它們的客戶端對象總是恒定不變的,而無需外部同步,那么稱為非可變的。字符串類和整數(shù)類都是非可變的,但在集合框架中并沒有提供直接的非可變類,而是通過對可變類進行封裝而得到非可變類。非可變集合不可修改,因而它可以在各個線程間平安共享而無需額外的同步。作為一個好的實踐準(zhǔn)那么,一旦生成非可變類之后,不要再持有被其封裝的集合類的引用,這樣才可以完全保證其非可變性。2、線程平安類的實例是可變的,但它的所有方法已經(jīng)通過使用足夠的內(nèi)部同步使其實例可以被并發(fā)的
4、使用而無需外部同步。并發(fā)的調(diào)用將會以某種全局一致的方式連續(xù)地執(zhí)行。隨機類和 定時器類都是線程平安類。集合框架中線程平安的類并發(fā)哈希映射類在Java SE 5 中被引入,它并不包含在原來的集合框架中,但它實現(xiàn)了集合框架Map接口。并發(fā)哈希映射類實現(xiàn)了并發(fā)和效率之間的高效平衡,已被作為哈希表類和同步映射表封裝在并發(fā)環(huán)境下的高效替代品。3、條件線程平安除了某些方法需要在沒有其它線程的干擾的情況下順次執(zhí)行之外,條件線程平安類和線程平安類類似。為了消除線程干擾的可能性,客戶端對象在調(diào)用這類方法的過程中需要獲得該集合類對象的鎖來進行同步。一些舊集合類如Vector和Hashtable都是條件線程平安類,對
5、這些集合類進行遍歷操作時需要對其進行外部同步。4、線程兼容對其對象實例的所有方法調(diào)用都通過外部同步之后再進行,線程兼容類可以平安的并發(fā)使用。集合框架中的通用目的集合的標(biāo)準(zhǔn)實現(xiàn),如數(shù)組鏈表類和哈希映射表類等都是線程兼容的類。對線程平安的集合類進行遍歷操作,需要先獲得一個對它的條件線程類封裝,然后再通過外部同步來進行遍歷。5、線程不友好線程不友好類無法在多線程環(huán)境下平安地并發(fā)使用,即使對其所有的方法調(diào)用都進行外部同步。Java語言中只有很少幾個類的方法是線程敵對的,已經(jīng)被聲明為不贊成使用。Java集合框架抽象接口及其實現(xiàn)的線程平安Java集合框架包括三個局部Bloch,1999:接口、實現(xiàn)和算法。
6、接口是抽象數(shù)據(jù)類型的表示集合,接口使得集合的操作和集合的具體實現(xiàn)細(xì)節(jié)相獨立。在面對對象的語言里,這些接口一般形成一個層次結(jié)構(gòu)。實現(xiàn)是指表示這些集合接口的具體實現(xiàn),實質(zhì)上是可重用的數(shù)據(jù)結(jié)構(gòu),即通用集合類。算法是指可以對實現(xiàn)集合接口的類進行一些實用計算的方法,比方排序和查找。這些算法可以說是多態(tài)的,同一個方法可以用于實現(xiàn)了適當(dāng)接口的不同實現(xiàn)類。這些算法實質(zhì)上是可重用的功能。Java集合框架的接口層次和通用實現(xiàn)如下:圖1 Java集合框架的接口層次接口通用實現(xiàn)集合哈希集合、樹集合和鏈接哈希集合列表數(shù)組鏈表和鏈接鏈表隊列優(yōu)先級隊列映射表哈希映射表、樹映射表和鏈接哈希映射表表1 Java接口的通用實現(xiàn)下
- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
3 積分
下載 | 加入VIP,下載共享資源 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Java 集合 框架 線程 安全