多线程怎么判断结束

hchongatustc 2010-03-21 03:07:43
我想让线程池Executor中执行10个线程,线程结束后再执行其他语句,我该怎么设置让10个线程结束后再运行其他语句,而不是执行线程中就运行下面的语句?
...全文
745 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
临碣 2010-03-22
  • 打赏
  • 举报
回复
java里面有java.util.concurrent,用来做多线程.

里面的ThreadPool可以比较方便的做这些事情
xinguohit 2010-03-22
  • 打赏
  • 举报
回复
参观学习.......
辰岡墨竹 2010-03-22
  • 打赏
  • 举报
回复
抱歉,WaitForSingleObject是Windows编程里的,Java里用wait(),写到一半思维跳到Windows开发去了……
辰岡墨竹 2010-03-22
  • 打赏
  • 举报
回复
用信号量的好处是不用考虑多线程之间的同步问题。
辰岡墨竹 2010-03-22
  • 打赏
  • 举报
回复
你可以用信号量,每启动一个线程就给信号量加一,结束一个就减一,全部结束后信号量就空了。然后再另外一个线程里用WaitForSingleObject等待,当发现信号量为0的时候就继续……
hellen_99010 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mkf_wk 的回复:]
public class Test extends Thread {

int i = 0;

public void run () {
System.out.println(getName()+" a");
}

public void mainrun(){
System.out.println(getName()+"zuihou"+i++);
}
public stati……
[/Quote]

我不是很明白调用这两方法后 t.start();t.join();打印出来的结果是:

Thread-10 a
Thread-9 a
Thread-8 a
Thread-7 a
Thread-6 a
Thread-5 a
Thread-4 a
Thread-3 a
Thread-2 a
Thread-1 a
ddd
Thread-0 a
Thread-0zuihou0


有人能说明下嘛!
longshenls 2010-03-22
  • 打赏
  • 举报
回复
来这里学习下
sunnylyy 2010-03-22
  • 打赏
  • 举报
回复

Thread[] threads = new Thread[10];
for(int i=0; i<10; i++){
final int index = i;
threads[i] = new Thread(){
public void run(){
try{
Thread.sleep(1000 * index);
}catch(InterruptedException e){

}
System.out.println("Thread " + index);
}
};

threads[i].start();
}

for(int i=0; i<10;i++){
try{
threads[i].join();
}catch(InterruptedException e){

}
}

//10个线程都执行完
System.out.println("done");


用join()判断
liangchencf 2010-03-22
  • 打赏
  • 举报
回复
每个线程都调用一边join。
ramparter 2010-03-22
  • 打赏
  • 举报
回复
Excecutor shutdown 和 isShutdown 还有 isTerminated不行么,,在不行就向2说的,,用数字标记记数
pasband 2010-03-22
  • 打赏
  • 举报
回复
这个问题我现在也在考虑,
之前写过类似的功能,是通过另外开一个管理线程定时检查工作线程状态,
功能是可以实现的,问题是如果检查时间间隔过短,管理线程占用资源过多,
而间隔大了,在工作线程比较繁忙的时候效率不高(比如每一秒检查一次,而工作线程只执行十几毫秒)

不知道有没有线程执行完指定回调函数的方法?
hchongatustc 2010-03-22
  • 打赏
  • 举报
回复
三楼的意思我不是很明白,感觉没能解决我的问题,isAlive()方法感觉会陷入我提到的问题中,即如果用if语句判别isAlive()再决定是否进行下面的语句,那么在线程尚未运行完时,main()就会判别,以至永远不会运行下面的语句。1楼的想法也会有这个问题。
我的意思是既然有个join()可以等待线程结束,那么有没有管理多线程的类的方法中可以等待所有线程运行完?
liu_siat 2010-03-22
  • 打赏
  • 举报
回复
用循环对每个线程调用join(),即可
哈特中尉 2010-03-22
  • 打赏
  • 举报
回复
isAlive();

Thread t1=new Thread("aaa");
if(t1.isAlive)
{
System.out.print("yes");
}
jinghua_zhou 2010-03-22
  • 打赏
  • 举报
回复
学习学习。。。。。。
无伤 2010-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 stu202060510 的回复:]

线程类有一个方法是

public final boolean isAlive();

你可以试一下
[/Quote]

可以试下, 三楼写的也相当不错。
mkf_wk 2010-03-21
  • 打赏
  • 举报
回复
我刚学了两天线程,哈哈哈
mkf_wk 2010-03-21
  • 打赏
  • 举报
回复
public class Test extends Thread {

int i = 0;

public void run () {
System.out.println(getName()+" a");
}

public void mainrun(){
System.out.println(getName()+"zuihou"+i++);
}
public static void main(String[] args) throws InterruptedException{
Test t = new Test();
Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();
Test t4 = new Test();
Test t5 = new Test();
Test t6 = new Test();
Test t7 = new Test();
Test t8 = new Test();
Test t9 = new Test();
Test t10 = new Test();
t1.start();
System.out.println(t1.getName());
t2.start();
System.out.println(t2.getName());
t3.start();
System.out.println(t3.getName());
t4.start();
System.out.println(t4.getName());
t5.start();
System.out.println(t5.getName());
t6.start();
System.out.println(t6.getName());
t7.start();
System.out.println(t7.getName());
t8.start();
System.out.println(t8.getName());
t9.start();
System.out.println(t9.getName());
t10.start();
System.out.println(t10.getName());
System.out.println("ddd");
t.start();
t.join();//线程让步
t.mainrun();

}
}
stu202060510 2010-03-21
  • 打赏
  • 举报
回复
线程类有一个方法是

public final boolean isAlive();

你可以试一下
wenzheng38 2010-03-21
  • 打赏
  • 举报
回复
如何判定多个线程是否都结束
采用计数器的方式,每次结束一个线程时计时器+1,当计数器等于线程个数时
说明可以执行下面的语句了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧