作者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
1F:推 lupig:谢谢大大 我懂了 我的CLASS中 并没 synchronized 所以可能 06/07 16:55
2F:→ lupig:要换ㄧ条路走 用 sleep的方法看看了 06/07 16:56
3F:→ sbrhsieh:不懂为什麽要换一条路?你可以自己加synchronized block 06/07 20:15
4F:推 lupig:後来看清楚了同步有分 方法或区块 再来研究一下 谢谢提醒唷 06/07 23:02