仿照网上写了一个方法统计n个线程同时调一个方法,都执行完需要多长时间,发现一个奇怪的问题packageme.ele.coffe.hr.stress.test;publicclasstest{privatestaticIntegererror=0;privatestaticIntegerthreads=40;privatestaticLongstartTime;privatestaticLongendTime;publicstaticvoidmain(String[]args){System.out.println("begintesting");System.out.println("线程数"+threads);WorkThread[]workThreads=newWorkThread[threads];for(inti=0;i
2 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
问题出在这for(inti=0;iworkThreads[i].start(); }当线程start以后,for循环中的threads这个值就变不断变小,所以你的线程本来就没执行完。你把threads换成一个final的常量就可以了。
杨魅力
TA贡献1811条经验 获得超6个赞
是这个threads的原因,你的主线程main中和线程使用的同一个threads计数,所以导致threads指定40时,不一定会开40个线程,可能出现如下:前面已开启了23个线程,且在主线程main的for操作之前完成,那么此时i=23,threads=23,所以不会再开线程了,所以导致threads无法等于0,所以无法输出!个人推荐使用executor、future来写线程,通过atomicinteger计数,你可以了解下!
添加回答
举报
0/150
提交
取消