Re: [問題] 如何取得執行中 Thread 的控制權 ??

看板java作者 (sbr)時間16年前 (2009/06/07 15:06), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
※ 引述《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
謝謝大大 我懂了 我的CLASS中 並沒 synchronized 所以可能
06/07 16:55, 1F

06/07 16:56, , 2F
要換ㄧ條路走 用 sleep的方法看看了
06/07 16:56, 2F

06/07 20:15, , 3F
不懂為什麼要換一條路?你可以自己加synchronized block
06/07 20:15, 3F

06/07 23:02, , 4F
後來看清楚了同步有分 方法或區塊 再來研究一下 謝謝提醒唷
06/07 23:02, 4F
文章代碼(AID): #1AAsRzRs (java)