hashmap在jdk1.7多執行緒環境下HashMap容易出現死迴圈所以執行緒不安全。hashmap是基於雜湊表的Map介面的實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。
此實現假定雜湊函式將元素適當地分佈在各桶之間,可為基本操作(get和put)提供穩定的效能。迭代collection檢視所需的時間與HashMap例項的“容量”(桶的數量)及其大小(鍵-值對映關係數)成比例。所以,如果迭代效能很重要,則不要將初始容量設定得太高(或將載入因子設定得太低)。
hashmap在jdk1.7多執行緒環境下HashMap容易出現死迴圈所以執行緒不安全。hashmap是基於雜湊表的Map介面的實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。
此實現假定雜湊函式將元素適當地分佈在各桶之間,可為基本操作(get和put)提供穩定的效能。迭代collection檢視所需的時間與HashMap例項的“容量”(桶的數量)及其大小(鍵-值對映關係數)成比例。所以,如果迭代效能很重要,則不要將初始容量設定得太高(或將載入因子設定得太低)。
執行緒安全:程式碼所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。 一個類或者程式所提供的介面對於執行緒來說是原子操作或者多個執行緒之間的切換,不會導致該介面的執行結果存在二義性,也就是不用考慮同步的問題。
執行緒不安全:是不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。
使用ThreadLocal,ThreadLocal會為每一個執行緒提供一個獨立的變數副本,這樣在多執行緒對資料訪問就不會出現衝突。因為每一個執行緒都擁有自己的變數副本,因此也就不需要同步該變數。ThreadLocal提供了執行緒安全的共享物件,在編寫多執行緒程式碼時,可以把不安全的變數封裝進ThreadLocal。
如果時web應用,可以使用Spring Bean的作用域中的request,在controller類前面加上@Scope(****),表明每次請求都會生成一個新的Bean物件。這樣也能起到執行緒安全的作用。
使用執行緒同步,關鍵字synchronized,當執行緒較多時,當一個執行緒呼叫該方法時,其他想要呼叫此方法的執行緒就要block ,多執行緒併發量大的時候會對效能有一定的影響。