多线程求助

r_x_y 2011-04-25 09:13:35
刚才发的怎么404了???

大家好:

我在编写一个使用多线程的程序。

介绍一下功能:
//有一个工作类:MailClient.java
public MailClient implements Runnable {

private void getNewMails()
{
//里面是一些简单的逻辑。
}

public void run() {
getNewMails();
}
}

接下来创建线程池来调用工作类
方法一:使用ExecutorService
简单些一下main
main(){
ExecutorService executorService = Executors.newCachedThreadPool();

executorService.execute(new MailClient());
}
结果:main函数结束,整个就结束。
然后方法一改进如下:增加
executorService.shutdown();
while (!executorService.isTerminated()) {}

结果:仍无法获得运行结果。


方法二:
自己编译一个线程池,针对每个线程判断一下状态:
while (mailT.isAlive()) {
}
能得到预期结果。

求助,怎么使用JDK提供的线程池,让所有线程池中所有线程结束后再停止?????
...全文
118 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
r_x_y 2011-04-25
  • 打赏
  • 举报
回复
确实手误:<
对,都可以用。


[Quote=引用 8 楼 lrbyantai 的回复:]

原来楼主是手误= =! 其实楼主的贴子就是两个方法都可以,是么...
[/Quote]
蛋黄车 2011-04-25
  • 打赏
  • 举报
回复
原来楼主是手误= =! 其实楼主的贴子就是两个方法都可以,是么...
r_x_y 2011-04-25
  • 打赏
  • 举报
回复
个人觉得让主线程睡眠是不可取,

因为有些情况下,无发预测线程运行所需要的时间。
r_x_y 2011-04-25
  • 打赏
  • 举报
回复
自己大意了,在调试的时候我是按照

executerService.shutdown();
while(executorService.isTerminated()) //注意:没有取非
{
}

但是发帖时候我是按照正确的方式发的:<
刚才又调试了一下。
其实第一种方式是可以运行的。
while(!executorService.isTerminated())



[Quote=引用 5 楼 lrbyantai 的回复:]

求解释,楼主
[/Quote]
凉岑玉 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gardner2010 的回复:]
先把main挂起,等子线程都执行完了再执行main
[/Quote]
对··先睡眠几秒钟··
小贝壳666 2011-04-25
  • 打赏
  • 举报
回复
先把main挂起,等子线程都执行完了再执行main
r_x_y 2011-04-25
  • 打赏
  • 举报
回复
结贴:

呵呵自己是最大的原因。

给大家分享一下。

方法一应该改写为:

while(!isTerminated()){
}

62,635

社区成员

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

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