首頁  >  問答  >  主體

Java 中的synchronized鎖定程式碼區塊的時候需不需要這個類別是單例

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

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

高洛峰高洛峰2669 天前907

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-06-28 09:24:12

    synchronized的用法有以下三種

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

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

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

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

    回覆
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:24:12

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

    回覆
    0
  • 取消回覆