鎖機制存在問題
? ? ? 1.在多線程競爭下,加鎖、釋放鎖會導致比較多的上下文切換和調度延時,引起性能問題。
? ? ? 2.個線程持有鎖會導致其它所有需要此鎖的線程掛起
? ? ? 3.如果一個優先級高的線程等待一個優先級低的線程釋放鎖會導致優先級倒置,引起性能風險
? ? ? 注意:獨占鎖是一種悲觀鎖,synchronized就是一種獨占鎖,會導致其它所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。而另一個更加有效的鎖就是樂觀鎖。所謂樂觀鎖就是,每次不加鎖而是假設沒有沖突而去完成某項操作,如果因為沖突失敗就重試,直到成功為止。
volatile問題:volatile只能保證變量對各個線程的可見性,但不能保證原子性
CAS算法操作
? ? ? ?CPU指令,在大多數處理器都采用CAS指令(我認為V的值應該為A,如果是,那么將V的值更新為B,否則不修改并告訴V的值實際為多少)。當多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程并不會被掛起,而是被告知這次競爭中失敗,并可以再次嘗試。CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什么都不做。