Java 中的synchronized鎖定程式碼區塊的時候需不需要這個類別是單例
高洛峰
高洛峰 2017-06-28 09:22:12
0
2
965

當它鎖定一個方法或一個程式碼區塊的時候,同一時刻最多只有一個執行緒執行這段程式碼。當兩個並發執行緒存取同一個物件object中的這個加鎖同步程式碼區塊時,一個時間內只能有一個執行緒執行。另一個執行緒必須等待目前執行緒執行完這個程式碼區塊以後才能執行該程式碼區塊。

那問題來了,如果兩個執行緒存取的是這個物件的不同實例,還會阻塞嗎?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
Ty80

synchronized的用法有以下三種

  1. 指定物件加鎖。類似於synchronized (instance) {}。

  2. 直接作用於實例方法。相當於對目前實例加鎖,進入同步方法前要取得目前實例的鎖。

  3. 直接作用於靜態方法。相當於對目前類別加鎖,進入同步方法前取得目前類別的鎖。

對於上面的1、2.必須是同一物件或同一實例時才會使執行緒阻塞。

扔个三星炸死你

鎖是加在物件實例上的。加在不同物件上的鎖是不會互相影響的。兩個線程訪問兩個不同對象,是不會互相阻塞的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板