java 线程池批量执行

来源:互联网 发布:杭州卷瓜网络客服电话 编辑:程序博客网 时间:2024/05/02 19:14
package com.test;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class TestMultiThreads {private static Integer num = 0;//Test Shutdown public static void executor1() throws Exception{ExecutorService pool = Executors.newFixedThreadPool(100);CompletionService completionService = new ExecutorCompletionService<Integer>(pool);for (int i = 0; i < 100; i++) {completionService.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {synchronized (num) {return ++num;}}});}//pool.shutdown();//启动一次顺序关闭,执行以前提交的任务,但不接受新任务。for (int i = 0; i < 100; i++) {Future<Integer> future = completionService.take();System.out.println(future.get());}System.out.println("==================================");if(pool.isShutdown()){System.out.println("pool is shutdown!");}for (int i = 0; i < 100; i++) {completionService.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {synchronized (num) {return ++num;}}});}for (int i = 0; i < 100; i++) {Future<Integer> future = completionService.take();System.out.println(future.get());}//启动一次顺序关闭,执行以前提交的任务,但不接受新任务。pool.shutdown();// 必须要有shutdown否则出错}//Test ShutdownNowpublic static void executor2() throws InterruptedException, ExecutionException{ExecutorService pool = Executors.newFixedThreadPool(100);CompletionService completionService = new ExecutorCompletionService<Integer>(pool);for(int i =0 ;i < 100;i++){completionService.submit(new Callable<Integer>() {@Overridepublic Integer call() throws Exception {//不一定线程安全return ++num;}});}List<Runnable> restRunList = null;for(int i=0;i<100;i++){if(i>50){restRunList = pool.shutdownNow();//不成功}System.out.println(completionService.take().get());}System.out.println("===============================");//restRunList为nullif(restRunList == null){return;}for(Runnable r : restRunList ){System.out.println(r);r.run();}}public static void main(String[] args) throws Exception {executor1();executor2();}}
213456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100==================================102101103104105106107108109110111112114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171113172173174175176177178179180182181183184185186187188189190191192193194195196197198199200201201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299===============================


0 0
原创粉丝点击