jdk1.5的threadpoolexecutor ,要在任务全部处理完后在接着做别的事情,这就涉及同步的做法了,有2种办法:
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 20,0, TimeUnit.SECONDS, new ArrayBlockingQueue(10),
new ThreadPoolExecutor.DiscardOldestPolicy());
for (int i = 0; i < 10; i++) {
executor.submit(new ThdRun(i));
}
executor.shutdown();
try {
executor.awaitTermination(100, TimeUnit.DAYS);
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("finish!");
输出结果为:
0
1
2
3
5
6
7
8
9
4
finish!
还一种做法就是:
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
executor.submit(new ThdRun(i));
}
executor.shutdown();
try {
executor.awaitTermination(100, TimeUnit.DAYS);
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("finish!");
也能达到同样的效果.
不过这两种方法还是的不同,如果run方法里面耗时长的(比如io)话。方法一任务就没有全部处理完,比如我拷贝50个文件,结果直拷贝了30几个,但是我用了个耗时长的while循环很正常怪呀,不知道是什么原因,怪。