看板 java 關於我們 聯絡資訊
※ 引述《yangpika (狗狗洋ˇ洋)》之銘言: : 現在有兩個object o1跟o2 : o1有兩個synchronized method m1,m2 : o2有一個synchronized method m3 : 現在有兩個thread t1,t2 : t1會call m1 m1內部會呼叫 m3 且m3會執行wait() : 在這情況下 : t2是不是無法執行m2 : 因為wait只是釋放o2的lock 不會釋放o1的lock : 那有辦法釋放o1跟o2的lock嗎?? 你這樣寫, 不如寫一個範例吧... class Foo { private Bar bar; public synchronized foo1() { bar.bar1(); } public synchronized foo2() { } } class Bar { public synchronized bar1() { wait(); } } 類似這樣吧 有人 invoke foo1() 的話, 的確那個 foo instance 的 monitor 會被佔著, 另一 thread invoke foo2 會 等. 這是正常也是正確的吧. 把 foo 的 monitor 也放走的話, 反而會出問題. 會不 會你該想一想, 是不是有設計上的問題才導致這種情況? 我會建議把要 lock 的對象集中為一個, 比如 foo2() 不是 synchronized method, 而是裡面一開始就 synchronized(bar) {...} -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82