1 static 2HashMap 3wait()和sleep 4volatile
1 static 使用案例
https://blog.csdn.net/qq_27053103/article/details/79564062
https://github.com/francistao/LearningNotes/blob/master/Part1/Android/ANR%E9%97%AE%E9%A2%98.md
http://www.reibang.com/p/ce6da05c93fe
pulbic?class?Something{??
public?synchronized?void?isSyncA(){}??
public?synchronized?void?isSyncB(){}??
public?static?synchronized?void?cSyncA(){}??
public?static?synchronized?void?cSyncB(){}??
}??
?那么矿辽,假如有Something類的兩個實例x與y丹允,那么下列各組方法被多線程同時訪問的情況是怎樣的?
a.?x.isSyncA()與x.isSyncB()? ?(x 都是對同一個實例(x)的synchronized域訪問袋倔,因此不能被同時訪問)
b.?x.isSyncA()與y.isSyncA()? ? ?( √ 是針對不同實例的雕蔽,因此可以同時被訪問)
c.?x.cSyncA()與y.cSyncB() (×因為是static synchronized,所以不同實例之間仍然會被限制,相當于Something.isSyncA()與 Something.isSyncB)
d.?x.isSyncA()與Something.cSyncA() (√ synchronzied的是實例方法與synchronzied的類方法由于鎖定(lock)不同的原因)
參考
https://blog.csdn.net/cs408/article/details/48930803
2??HashMap
HashMap的主干是一個Entry數(shù)組宾娜。Entry是HashMap的基本組成單元批狐,每一個Entry包含一個key-value鍵值對。
HashMap和Hashtable區(qū)別前塔?
1.HashMap支持null Key和null Value嚣艇;Hashtable不允許。這是因為HashMap對null進行了特殊處理嘱根,將null的hashCode值定為了0髓废,從而將其存放在哈希表的第0個bucket巷懈。
2.HashMap是非線程安全该抒,HashMap實現(xiàn)線程安全方法為Map map = Collections.synchronziedMap(new HashMap());Hashtable是線程安全
3.ArrayList和LinkedList對比
ArrayList和Vector使用了數(shù)組的實現(xiàn)顶燕,可以認為ArrayList或者Vector封裝了對內(nèi)部數(shù)組的操作凑保,比如向數(shù)組中添加,刪除涌攻,插入新的元素或者數(shù)據(jù)的擴展和重定向欧引。
LinkedList使用了循環(huán)雙向鏈表數(shù)據(jù)結(jié)構(gòu)。與基于數(shù)組ArrayList相比恳谎,這是兩種截然不同的實現(xiàn)技術(shù)芝此,這也決定了它們將適用于完全不同的工作場景。
3wait()和sleep()的區(qū)別因痛。
① 這兩個方法來自不同的類分別是婚苹,sleep來自Thread類,和wait來自O(shè)bject類鸵膏。sleep是Thread的靜態(tài)類方法膊升,誰調(diào)用的誰去睡覺,即使在a線程里調(diào)用b的sleep方法谭企,實際上還是a去睡覺廓译,要讓b線程睡覺要在b的代碼中調(diào)用sleep评肆。
② 鎖:?最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖非区,使得其他線程可以使用同步控制塊或者方法瓜挽。
③ 使用范圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用征绸,而sleep可以在任何地方使用秸抚。
?? synchronized(x){???????
????????x.notify()?//或者wait()??
? }