`
os586
  • 浏览: 15666 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

主线程怎样从子线程当中得到值?

阅读更多
现在在主线程当中调有了子线程,
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库!

写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。
但是,因为是子线程,
主线程无法返回子线程当中的数据。
这该怎么办?

还有一种情况就是:当从主线程中调用子线程的结果时,得到的结果,可能因为子线程还没有写入,就调用了,这如何解决?

有没有一种可能就是在子线程当中弹出一个web窗口?当然不能仅挶于IE的
分享到:
评论
11 楼 coolzyt 2007-09-21  
Callable
10 楼 baallee 2007-09-21  
galaxystar 写道
baallee 写道
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html


CountDownLatch是信号量的一种用法之一, 与这里的父子线程调用无关, 楼主的需求中并没说要限制被调线程数量.

并且, CountDownLatch本身也是不适用的, 因为它会处理一次信号量操作, 然后就销毁了.
Semaphore是可以重置的.


CountDownLatch启到阻塞线程而已。获取值还要用其他方法。
9 楼 galaxystar 2007-09-20  
baallee 写道
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html


CountDownLatch是信号量的一种用法之一, 与这里的父子线程调用无关, 楼主的需求中并没说要限制被调线程数量.

并且, CountDownLatch本身也是不适用的, 因为它会处理一次信号量操作, 然后就销毁了.
Semaphore是可以重置的.
8 楼 baallee 2007-09-20  
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html
7 楼 galaxystar 2007-09-19  
os586 写道
现在在主线程当中调有了子线程,
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库!

写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。


我的理解是, 主线程调用子线程中的插入操作并得到一个插入后记录的序列id, 对吧?

如果不是, 那主线程的数据通过子线程插入后, 为什么还需要从子线程中得到数据, 数据不就是主线程给子线程的吗?

另外, 主线程应该是起一个新的线程来处理插入的吧, 线程间只能起线程或共享资源, 没有调用的说法吧?

并且, 我感觉主线程调用子线程插入, 为什么要在父子两根线程里进行呢?
白白浪费同步开销.

最后, 如果要解决线程间的数据通信, 并且, 主线程要等待子线程, 那么1.5包里的Condition可以胜任.
不用wait-notify是因为notify是随机唤醒主线程的.




6 楼 javachs 2007-09-19  
join
5 楼 coolzyt 2007-09-18  
concurrent包有一个阻塞队列,可以解决你的需求
4 楼 hamlet 2007-09-18  
可以用observer
3 楼 Cappuccino 2007-09-17  
以前碰过过一次类似的,当时是把子线程写成inner class然后直接把结果传递到outer class
2 楼 flashroom 2007-09-17  
主线程调用子线程后 wait
子线程执行完操作后 notifyAll 唤醒主线程
猪线程继续执行读取子线程结果的操作


线程间传递数据可以考虑静态变量
1 楼 孤独勇者 2007-09-17  
可以考虑使用事件机制,当子线程写入后,触发一个事件,并将数据封装到事件里面,而主线程则监听事件并处理。
Global site tag (gtag.js) - Google Analytics