作者hougzou (学无止境,啥时才摔到底?)
看板java
标题Re: [问题] 父亲要怎麽被子thread叫醒?
时间Sun Jul 29 11:06:58 2007
※ 引述《workworkwork (专心K书?)》之铭言:
: ※ 引述《TonyQ (骨头)》之铭言:
: : 两个THREAD互相沟通就行啦
: : 最简单的作法
: : 你可以 lock 其中一个thread
: : 直到收到另一个thread的讯息在解锁就好了
: : [中略]
: : 以上这可能可以参考
: : 这些看你的实作 应该不难做@@
: 但是我不是二个thread要互相沟通啊@@~
: 我是下面的情况@@~
: 在A程式中执行B.start();
: 然後我想做的是让A停下来等B的讯息进来~
: 请问一下这样有方法吗?
我想,你必须厘清你是应该用 method,或只是为了用 thread 而 thread...
若是 thread....
你的 B 物件(子)要有讯息给 A (父),再怎样也要中间有可以沟通的物件,
也就是将被 B 所改变的值,或是 B 所执行的某个阶段的 flag 在改变後让
A 能取得。注意! 这是你要在 B Thread 尚未执行结束或是执行某个定点时
让 A 由 sleep 恢复为 active 的做法。
若你要的只是 B Thread 结束之後才继续执行 A ,哪麽直接用 join 就好了。
如果你用的是 join,就意义上来说,你的需求与呼叫一个 B method 没有多
大的差异(如果你只有一个子Thread),用 method 其实比较实际些。
回头看看现实面,你要等待一个 Thread 结束,是人工来控制比较好,或是
采用 join 其实见仁见智,但有时候你会发现,用 join 并不那麽的理想。
譬如要在 Midlet 中使用 HttpConnection,许多手机或模拟器会出现询问画
面,要你确认是否接受付费连线,而 HttpConnection 合法的使用方式是另
开一个 thread 来使用,但询问画面却是由 Midlet 的主 Thread 来控制,
想当然尔,若你使用了join,整只程式就会陷入 dead lock。
若这篇能让你解决问题或是有更好的做法,请记得回来提供你解决方案回馈
给大家参考喔!
--
No Dying Skills, ● - Dame! New tech...
but Lazy Users. .\)
http://www.javaworld.com.tw/roller/page/morris﹒ ︵ √\ ___________________
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.120.71