作者sbrhsieh (sbr)
看板java
標題Re: [問題] 如何取得執行中 Thread 的控制權 ??
時間Sun Jun 7 15:06:34 2009
※ 引述《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
推 lupig:謝謝大大 我懂了 我的CLASS中 並沒 synchronized 所以可能 06/07 16:55
→ lupig:要換ㄧ條路走 用 sleep的方法看看了 06/07 16:56
→ sbrhsieh:不懂為什麼要換一條路?你可以自己加synchronized block 06/07 20:15
推 lupig:後來看清楚了同步有分 方法或區塊 再來研究一下 謝謝提醒唷 06/07 23:02