如題,請問像ConcurrentHashMap等高效能的類別具體的業務使用場景是哪些?
平常我們寫程式碼的時候用得最多的一般是HashMap,也習以為常了
可是Java裡有其他的高效能的Map,感覺平常也用不到
百度了一下,只看到了HashMap和ConcurrentHashMap的差別
卻不曉得哪些具體的業務使用場景會用到這些類別
因此感覺有些茫然,希望前輩能指導一下,謝謝
某草草2017-06-28 09:25:10
ConcurrentHashMap是java.util.concurrent套件下防止並發的工具類別。業務使用時自己的並發類別實作ThreadLocal也行。 。 。
主要用在多執行緒中,Java早期版本是使用synchronized同步區塊的方式,加鎖釋放等不易解決問題。而現在Java官方都寫好了,看看多執行緒就知道了。 。 。
業務場景就比如說公司的人員資訊用多執行緒的方式入庫,如果使用java.util.List就會有造成每個執行緒資料不一致的現象,這時就要用並發工具類了。主要注意 寫
資料時,讀取資料就無所謂了。 。 。
欧阳克2017-06-28 09:25:10
ConcurrentHashMap 專門是給多個執行緒存取的。舉個例子:
// 在线用户管理类
public class UserManager {
private Map<String, User> userMap = new ConcurrentHashMap<>();
// 当用户登入时调用
public void onUserSignIn(String sessionId, User user) {
this.userMap.put(sessionId, user);
}
// 当用户登出或超时时调用
public void onUserSignOut(String sessionId) {
this.userMap.remove(sessionId);
}
public getUser(String sessionId) {
return this.userMap.get(sessionId);
}
}
當有許多使用者同時登入和登出時,onUserSignIn()
和 onUserSignOut()
就會有很多執行緒同時呼叫。
黄舟2017-06-28 09:25:10
謝邀。
你得先知道:
在多執行緒對一個沒有保護的物件執行操作會導致大家看到的狀態不一致。
你可以開幾個執行緒對一個普通的hashMap去put,remove,前提是在一定條件下,例如裡面元素符合一定要求,大於小於等於某個數之類的。
ConcurrentHashMap
是jdk的並發套件中提供的並發map,可以有效防止多執行緒操作一個物件時出現物件副本不一致。
場景的話百度可以搜尋一下。
巴扎黑2017-06-28 09:25:10
區別就不用說了.這些你應該都已經了解了.
為了確保線程安全,我們一般都是用Synchronize關鍵字,有了ConcurrentHashMap後,你可以不用再使用笨重的Synchronize方法了. 另外ConcurrentHashMap在多線程的情況下,也是一般用在讀多寫少的情況.不是所有的多線程都可以使用這個並發工具類的.