日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.以及JDK1.5ConcurrentHashMap新特性

發布時間:2024/10/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .以及JDK1.5ConcurrentHashMap新特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、HashMap和Hashtable的區別

先看2個類的定義

結論:可見Hashtable 繼承自 Dictiionary 而 HashMap繼承自AbstractMap

Hashtableput方法如下:

注意1 方法是同步的
注意2 方法不允許value==null
注意3 方法調用了key的hashCode方法,如果key==null,會拋出空指針異常 HashMap的put方法如下

HashMapput方法如下:

注意1 方法是非同步的
注意2 方法允許key==null
注意3 方法并沒有對value進行任何調用,所以允許為null

總結:

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap?就必須為之提供外同步(Collections.synchronizedMap)。

二、ConcurrentHashMap新特性

ConcurrentHashMap出現問題原因:HashMap不是線程安全的,因此多線程操作時需要格外小心。

ConcurrentHashMap新特性:效率比Hashtable高,并發性比hashmap好。結合了兩者的特點。

ConcurrentHashMap如何實現線程安全:

從ConcurrentHashMap代碼中可以看出,它引入了一個“分段鎖”的概念,具體可以理解為把一個大的Map拆分成N個小的HashTable,根據key.hashCode()來決定把key放到哪個HashTable中。

在ConcurrentHashMap中,就是把Map分成了N個Segment,put和get的時候,都是現根據key.hashCode()算出放到哪個Segment中。

?ConcurrentHashMap中主要實體類就是三個:ConcurrentHashMap(整個Hash表),Segment(桶),HashEntry(節點)。

?get 方法:

?

put方法put 操作一上來就鎖定了整個segment,這當然是為了并發的安全,修改數據是不能并發進行的。

segment里面才是真正的hashtable,即每個segment是一個傳統意義上的hashtable。

remove方法:remove 操作非常類似put

三、知識點掃盲

1. hashcode()eaquals()區別

一般來講,equals方法是給用戶調用的,如果你想判斷2個對象是否相等,你可以重寫equals方法,然后在代碼中調用,就可以判斷他們是否相等了。簡單來講,equals方法主要是用來判斷從表面上看或者從內容上看,2個對象是不是相等。舉個例子,有個學生類,屬性只有姓名和性別,那么我們可以認為只要姓名和性別相等,那么就說這2個對象是相等的。

hashcode方法一般用戶不會去調用,比如在hashmap中,由于key是不可以重復的,他在判斷key是不是重復的時候就判斷了hashcode這個方法,而且也用到了equals方法。這里不可以重復是說equals和hashcode只要有一個不等就可以了!所以簡單來講,hashcode相當于是一個對象的編碼,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比較起來不直觀。我們一般在覆蓋equals的同時也要覆蓋hashcode,讓他們的邏輯一致。舉個例子,還是剛剛的例子,如果姓名和性別相等就算2個對象相等的話,那么hashcode的方法也要返回姓名的hashcode值加上性別的hashcode值,這樣從邏輯上,他們就一致了。

2.關鍵字volatite?

Java 語言提供了一種稍弱的同步機制,即 volatile 變量.用來確保將變量的更新操作通知到其他線程,保證了新值能立即同步到主內存,以及每次使用前立即從主內存刷新. 當把變量聲明為volatile類型后,編譯器與運行時都會注意到這個變量是共享的.

volatile 變量對所有線程是立即可見的,對 volatile 變量所有的寫操作都能立即反應到其他線程之中,換句話說:volatile 變量在各個線程中是一致的,所以基于 volatile 變量的運算是線程安全的.?

四、 參考來源

1.?http://blog.csdn.net/shohokuf/article/details/3932967

2.?http://blog.csdn.net/wl_ldy/article/details/7228127

3.?http://blog.csdn.net/xuefeng0707/article/details/40834595

4.?http://www.cnblogs.com/yakun/p/3589437.html

?

轉載于:https://www.cnblogs.com/xumaodun/p/4915634.html

總結

以上是生活随笔為你收集整理的.以及JDK1.5ConcurrentHashMap新特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。