由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 问个多线程的问题。
相关主题
问个多线程的问题可以多个线程同时读一个文件吗
问一个multiprocess的问题求推荐的java多线程教程
问个多线程问题我觉得新手应该系统学学基本知识
ZT: 关于性爱的多线程问题研究(一)怎么可以练习多线程编程呢?
core java多线程一般面试什么问个程序调用的问题
求教 java.lang.outofMemory问个JAVA设计多线程cache问题
多线程搜索同一个文件问题。suggestions needed
[合集] 请教: A question related to thread communication向能人请教
相关话题的讨论汇总
话题: 线程话题: join话题: 生成话题: 主程序话题: count
进入Java版参与讨论
1 (共1页)
d****g
发帖数: 1049
1
正在学multithreading. 现在不知道该如何在主程序里
等待所有线程都结束以后再执行以后的程序段。比如说:
我有个主程序产生一个菜单,每个菜单项执行一堆线程。
(比如说是一个for loop生成10个线程,等待1秒后再生成10个线程.
这20个线程同时执行大量计算。
我怎么能在主程序里知道这堆线程全部完成了,然后再显示菜单?是不是
必须用join(), 并且是在所有线程生成以后再执行join()?
还是可以生成一个线程就join()?
可不可以用Thread.activeCount()来做并且避免busy waiting?
c*****t
发帖数: 1879
2

Join AFTER creating all the threads, since once you call join, the
current thread is blocked.

【在 d****g 的大作中提到】
: 正在学multithreading. 现在不知道该如何在主程序里
: 等待所有线程都结束以后再执行以后的程序段。比如说:
: 我有个主程序产生一个菜单,每个菜单项执行一堆线程。
: (比如说是一个for loop生成10个线程,等待1秒后再生成10个线程.
: 这20个线程同时执行大量计算。
: 我怎么能在主程序里知道这堆线程全部完成了,然后再显示菜单?是不是
: 必须用join(), 并且是在所有线程生成以后再执行join()?
: 还是可以生成一个线程就join()?
: 可不可以用Thread.activeCount()来做并且避免busy waiting?

d****g
发帖数: 1049
3
thx.
但是如果有的线程已经完成了,调用join()会不会有什么
IllegalThreadStateException
之类的错误?

【在 c*****t 的大作中提到】
:
: Join AFTER creating all the threads, since once you call join, the
: current thread is blocked.

c*****t
发帖数: 1879
4
shouldn't

【在 d****g 的大作中提到】
: thx.
: 但是如果有的线程已经完成了,调用join()会不会有什么
: IllegalThreadStateException
: 之类的错误?

B*********h
发帖数: 800
5
you can use a CountDownLatch. it works like this:
1. in the main thread, you say I am going to count down from N.
2. in each of the N threads you want to create and run, count down the latch
at the end of run().
3. the mainthread blocks until the latch count is zero.
go check it out. but you can simply call join() as coconut pointed out.

【在 d****g 的大作中提到】
: 正在学multithreading. 现在不知道该如何在主程序里
: 等待所有线程都结束以后再执行以后的程序段。比如说:
: 我有个主程序产生一个菜单,每个菜单项执行一堆线程。
: (比如说是一个for loop生成10个线程,等待1秒后再生成10个线程.
: 这20个线程同时执行大量计算。
: 我怎么能在主程序里知道这堆线程全部完成了,然后再显示菜单?是不是
: 必须用join(), 并且是在所有线程生成以后再执行join()?
: 还是可以生成一个线程就join()?
: 可不可以用Thread.activeCount()来做并且避免busy waiting?

d****g
发帖数: 1049
6
Thx BulletTooth and coconut.
我现在用join()。似乎运行正常。
可是在不同系统里我的程序表现非常不同。
我在我的XP Pro Sp2环境调试(java 1.5 updated),
程序运行结果是我预期的。
可是我把程序放到Solaris 10环境里,竟然运行
表现根产生死锁类似。程序要等很久才能进行线程运算。
比如说我分三次产生30个线程,每批10个,批间间隔3秒。
我用一个循环产生线程并start(). 设一个计数器到
10个线程都出现然后同时开始计算。全部30个线程产生
之后运行join(). 在我XP环境运行正常,第一批10个
生成以后可以探测到运行,然后是第二和第三批都正常。
可是弄到Solaris下感觉像是第一批产生以后等第二第
三批线程全部生成才大家一起运行计算。如果线程很多
等待要达到1-2分钟左右,就像死锁一样。但运算结果是对的。
不知道是怎么回事。

latch

【在 B*********h 的大作中提到】
: you can use a CountDownLatch. it works like this:
: 1. in the main thread, you say I am going to count down from N.
: 2. in each of the N threads you want to create and run, count down the latch
: at the end of run().
: 3. the mainthread blocks until the latch count is zero.
: go check it out. but you can simply call join() as coconut pointed out.

1 (共1页)
进入Java版参与讨论
相关主题
向能人请教core java多线程一般面试什么
one multi-threading question求教 java.lang.outofMemory
怎么练习java multithread多线程搜索同一个文件问题。
Object比较[合集] 请教: A question related to thread communication
问个多线程的问题可以多个线程同时读一个文件吗
问一个multiprocess的问题求推荐的java多线程教程
问个多线程问题我觉得新手应该系统学学基本知识
ZT: 关于性爱的多线程问题研究(一)怎么可以练习多线程编程呢?
相关话题的讨论汇总
话题: 线程话题: join话题: 生成话题: 主程序话题: count