锁定老帖子 主题:主线程怎样从子线程当中得到值?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-17
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库! 写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。 但是,因为是子线程, 主线程无法返回子线程当中的数据。 这该怎么办? 还有一种情况就是:当从主线程中调用子线程的结果时,得到的结果,可能因为子线程还没有写入,就调用了,这如何解决? 有没有一种可能就是在子线程当中弹出一个web窗口?当然不能仅挶于IE的 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-17
可以考虑使用事件机制,当子线程写入后,触发一个事件,并将数据封装到事件里面,而主线程则监听事件并处理。
|
|
返回顶楼 | |
发表时间:2007-09-17
主线程调用子线程后 wait
子线程执行完操作后 notifyAll 唤醒主线程 猪线程继续执行读取子线程结果的操作 线程间传递数据可以考虑静态变量 |
|
返回顶楼 | |
发表时间:2007-09-17
以前碰过过一次类似的,当时是把子线程写成inner class然后直接把结果传递到outer class
|
|
返回顶楼 | |
发表时间:2007-09-18
可以用observer
|
|
返回顶楼 | |
发表时间:2007-09-18
concurrent包有一个阻塞队列,可以解决你的需求
|
|
返回顶楼 | |
发表时间:2007-09-19
join
|
|
返回顶楼 | |
发表时间:2007-09-19
os586 写道 现在在主线程当中调有了子线程,
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库! 写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。 我的理解是, 主线程调用子线程中的插入操作并得到一个插入后记录的序列id, 对吧? 如果不是, 那主线程的数据通过子线程插入后, 为什么还需要从子线程中得到数据, 数据不就是主线程给子线程的吗? 另外, 主线程应该是起一个新的线程来处理插入的吧, 线程间只能起线程或共享资源, 没有调用的说法吧? 并且, 我感觉主线程调用子线程插入, 为什么要在父子两根线程里进行呢? 白白浪费同步开销. 最后, 如果要解决线程间的数据通信, 并且, 主线程要等待子线程, 那么1.5包里的Condition可以胜任. 不用wait-notify是因为notify是随机唤醒主线程的. |
|
返回顶楼 | |
发表时间:2007-09-20
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html |
|
返回顶楼 | |
发表时间:2007-09-20
baallee 写道 你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html CountDownLatch是信号量的一种用法之一, 与这里的父子线程调用无关, 楼主的需求中并没说要限制被调线程数量. 并且, CountDownLatch本身也是不适用的, 因为它会处理一次信号量操作, 然后就销毁了. Semaphore是可以重置的. |
|
返回顶楼 | |