執行緒 synchronized的使用

2021-08-29 17:57:21 字數 1544 閱讀 8121

synchronized

public class sync

@override

public void run()

} public void pf(int i) catch (interruptedexception e)

system.err.println(i+":"+new date().gettime());

} public static void main(string args) throws interruptedexception

}

輸出結果為:

t-0:1-1540263348943

t-1:2-1540263348943

2:1540263350943

1:1540263352943

t-0:執行消耗4s   t-1執行消耗2s,說明同時執行pf()。

修改pf()方法:

public void pf(int i)  catch (interruptedexception e) 

system.err.println(i);

} }

執行結果:

t-1:2-1540263491240

t-0:1-1540263491241

2:1540263493241

1:1540263497241

t-1:消耗 2s  t-0消耗6s 說明t-1先占用pf()方法執行完之後才釋放的鎖,之後t-0才進到pf()方法

@override

public void run()

run方法修改。

執行結果:

t-0:1-1540263718637

t-1:2-1540263718637

2:1540263720638

1:1540263722638

t-0消耗4s   t-1消耗2s,發現t-0並沒有對pf()方法進行上鎖。問題在於synchronized(this){}鎖的是這個類的例項物件。

public void pf(int i)  catch (interruptedexception e) 

system.err.println(i+":"+new date().gettime());

} }

修改pf()方法其他不變

執行結果:

t-0:1-1540264086174

t-1:2-1540264086174

1:1540264090175

2:1540264092175

t-0消耗4s   t-1消耗6s,發現t-0對pf()方法加了鎖。run方法中還是sync sync = new sync();synchronized(sync.class){}鎖的是類物件。

執行緒的共享 synchronized

執行緒的共享 synchronized synchronized 修飾方法,或是作用於塊,但是無論如何,我們都應該視其為乙個禁入條件,也就是說,synchronized應該使用的場景是 當乙個方法有可能被並行執行時,而其內部有對資料進行增刪改的操作時,需要被保證其進入條件,此時可選擇使用,synch...

執行緒synchronized 例子

public class foo public int fix int y return x public class myrunnable implements runnable catch interruptedexception e system.out.println thread.curr...

執行緒同步synchronized

synchronized只是保證在同乙個時刻,其他執行緒不能訪問鎖定的資源,但是其他方法或者是變數不能鎖定控制的 synchronized obj 上面語法格式中synchronized後括號裡的obj就是同步監視器,上面 的含義是 執行緒開始執行同步 塊之前,必須先獲得對同步監視器的鎖定。任何時刻...