为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这里一定要加上sleep(10)?如果不加sleep(10),程序最后不会终止?

为什么这里一定要加上sleep(10)?如果不加sleep(10),程序最后不会终止?

catspeake 2022-05-19 12:15:46
public class MainTest {public static void main(String[] args) {ExecutorService threadPool = Executors.newFixedThreadPool(5);for(int i = 0; i < 100000; i++) {threadPool.execute(new Command());}while(true) {try {Thread.sleep(10);}catch (InterruptedException e) {e.printStackTrace();}if(Resource.getTotal() == 100000) {threadPool.shutdown();break;}}}}主线程无线循环判断,当总数到达100000的时候,终止线程池,然后程序终止。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

加睡眠是为了让出cpu,让其它线程能尽快执行
这个代码应该改成main线程在某个对象wait,而Command线程每算完一个看看是否Resource.getTotal() == 100000,如果是则对这个对象notify

如果是是jdk1.7可以考虑使用CountDownLatch类,latch = new CountDownLatch(100000),然后main线程latch.await(),每个Command线程结束前调用一下latch.countDown(),等100000个Command执行完成了main线程就会被唤醒继续执行

查看完整回答
反对 回复 2022-05-23
?
守着一只汪

TA贡献1872条经验 获得超3个赞

sleep(10)对用户没什么实质影响,但对JVM有影响,在sleep(10)这段时间线程休眠,可以走到if代码段判断条件再根据条件结束线程,如果没有sleep(10)这句,程序会一直在while内部循环,走不到if代码段

查看完整回答
反对 回复 2022-05-23
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

在单核机器上,不加sleep(10),主线程会一直占用cpu资源,其他线程无法运行

查看完整回答
反对 回复 2022-05-23
  • 3 回答
  • 0 关注
  • 712 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信