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线程就会被唤醒继续执行
守着一只汪
TA贡献1872条经验 获得超3个赞
sleep(10)对用户没什么实质影响,但对JVM有影响,在sleep(10)这段时间线程休眠,可以走到if代码段判断条件再根据条件结束线程,如果没有sleep(10)这句,程序会一直在while内部循环,走不到if代码段
添加回答
举报
0/150
提交
取消