佇列和同步鎖備忘

2021-07-28 11:04:37 字數 526 閱讀 4709

在不同執行緒中傳遞物件,尤其是匿名內部類物件,比如在a執行緒中初始化匿名內部類,傳遞到b執行緒中,在b執行緒中呼叫,相當於b執行緒中呼叫這個匿名內部類對應的外部物件。

不同執行緒呼叫,是主動呼叫這個匿名內部類對應的物件,可能造成併發問題,可以加鎖。

佇列是乙個容器,也在不同執行緒中呼叫,但是因為主要作用是事件通知型別的,也就是說是非同步模式,乙個執行緒中發出這個訊息放到佇列中,另乙個執行緒中去取出訊息並觸發事件,和上面的不同主要是佇列是非同步模式,多用在事件通知,上面是主動呼叫模式。

多執行緒加同步鎖,或者使用單執行緒佇列,都可以解決併發的問題,但是用法不一樣。

android中在不同執行緒中傳遞了handle匿名內部類,但是使用的是佇列呼叫,主要原因是乙個ui程式,在重新整理介面元素的機制上,最好像事件通知一樣,乙個執行緒迴圈取出事件並執行,理論上,不同執行緒中加鎖呼叫handle改變ui也可以做到,但是決定ui顯示的物件,在不同執行緒中實時改變,造成的一些問題可能不好解決,比較複雜。

總結,在解決併發問題時,優先是同步鎖,單執行緒佇列並不是解決多執行緒併發問題的,而是非同步通知的。

內在鎖和同步

每個物件都有乙個與之關聯的內在鎖。按照慣例,乙個執行緒,需要獨佔和一致的乙個物件的字段,在進入這個物件前得需要這個物件的內在鎖,當處理完這些欄位後,需要釋放這些內在鎖。只有有乙個執行緒擁有乙個內在鎖,其他的執行緒就不能獲取這同樣的鎖。當其他試圖獲取這把鎖時將被阻塞。在同步方法中的鎖 當執行緒呼叫同步...

鎖和同步的區別

用法上的不同 synchronized既可以加在方法上,也可以載入特定 塊上,而lock需要顯示地指定起始位置和終止位置。synchronized是託管給jvm執行的,lock的鎖定是通過 實現的,它有比synchronized更精確的執行緒語義。效能上的不同 lock介面的實現類reentrant...

執行緒的同步和鎖

為避免多執行緒對同乙個物件進行操作,對資料造成的破壞。public class tt extends thread override public void run public int takeit int x public static void main string args 非靜態方法同步...