首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

线程池同步的解决方法

2012-11-01 
线程池同步的解决办法?? jdk1.5的threadpoolexecutor ,要在任务全部处理完后在接着做别的事情,这就涉及同

线程池同步的解决办法

?? 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!");输出结果为:0123567894finish!

??

?

?????? 还一种做法就是:

?

??????????

  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循环很正常怪呀,不知道是什么原因,怪。

1 楼 fei2115958 2009-10-09   这些方法都不是很好,阻塞线程要用barrier!
即:java.util.concurrent.CyclicBarrier。

热点排行