1.什麼是線程安全類
當多個線程訪問一個類時,如果不用考慮這些線程在運行時環境下的交替執行和調度,並且不需要額外的同步以及在調用方代碼不必要做其他的協調,這個類的行爲依然是正確的,那麼這個類是線程安全的類。
2.如何保證線程安全
1.不要跨線程共享變量
2.共享狀態變爲不可變的
3.在任何訪問共享變量的時候使用同步
3.原子操作
1.原子操作是指不會被線程調度機制打斷的操作;這種操作一旦開始,就一直運行到結束,中間不會換到另一個線程)
2.java.util.concurrent.atomic包下實現了原子操作
3.java中java.util.concurrent.atomic(CAS理論)+volatile(內存可見性)關鍵字
4.a和b各爲原子操作,但是a+b不等於原子操作
5.原子操作可以保證線程安全,volatile關鍵字保證了內存可見性
注:原子操作+volatile內存可見性達到了鎖的效果
4.鎖
1.鎖保證了內存的可見性
2.鎖保證了線程的互斥
3.鎖保證了a和b各爲原子操作,但是a+b等於原子操作
注:鎖保證了原子性和內存可見性