Re: [問題] 如何取得執行中 Thread 的控制權 ??
※ 引述《lupig (未來和肚子??)》之銘言:
: 我的問題是這樣的
: 我的程式裡面有好幾個 Runnable 的 class 所組成
: 譬如是 A B C D E 這5個 class
: 啟動的順序也為 A B C D E(就是說 B 在 A 中啟動, C 在 B 中啟動)
: 我的目的是想要 C 執行到一半先等待
: 我在 C 程式中分別呼叫
: this.wait();
: 或
: Thread.currentThread().wait()
: 皆跑出
: Exception in thread "Thread-30" java.lang.IllegalMonitorStateException:
: current thread not owner
: 請問我要怎麼 才能取得C class 的控制權呢?
我看不懂你想要做到什麼,也不懂何謂「取得C class 的控制權」....
只知道你可能想使用基本的 wait/notify 機制。
wait/notify 機制最基本的觀念是要執行一個 object 的 wait method 必須要
先取得此 object 的 monitor(透過 synchronized block)。當對一個 object A
進行 wait 操作,執行這個操作的 thread T 會釋放先前取得的 monitor(of A),
並且進入 inactive 狀態(此 thread 不再被排程)。直到另一個 thread 取得 A
monitor 後對 A 執行 notify/notifyAll 操作,thread T 回到 active 狀態加入
取得 A monitor 的競爭行列裡,thread T 必須等到他獲得了 A monitor 才會被
排程繼續執行下去。而對 A 執行 notify/notifyAll 操作的 thread 不會馬上
釋放 A monitor,等到該 thread 的執行離開了 synchronized block 才會釋放
A monitor。
需要範例可以參考網路上的教學文章。
http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/WaitNotify.htm
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.138.178
推
06/07 16:55, , 1F
06/07 16:55, 1F
→
06/07 16:56, , 2F
06/07 16:56, 2F
→
06/07 20:15, , 3F
06/07 20:15, 3F
推
06/07 23:02, , 4F
06/07 23:02, 4F