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
- java 线程池批量执行
- Java使用线程池批量顺序执行任务
- java 等待线程/线程池执行完毕
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java并发编程(八)——批量获取多条线程的执行结果
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java线程基础-CountDownLatch-批量执行多线程完成,再由主线程发起
- java并发 -线程池,任务执行
- Java 判断线程池 执行完毕
- 使用 Java 执行器实现线程池
- 使用 Java 执行器实现线程池
- Java多线程--任务执行(线程池)
- 分析Java线程池执行原理
- Java线程池执行原理分析
- Java 线程池执行原理分析
- java执行器与线程池
- java开发-批量线程同步
- JAVA线程 执行
- 成功安装jython
- python for循环
- 机械学习资料
- 读取SDCard图片+形成缩略图
- 关于Android系统休眠后,线程的执行情况
- java 线程池批量执行
- select用法详解
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
- 清空textbox中的内容
- How to modify wifi NV
- Java读取工程里的文件
- 触发器
- 选择云存储服务商的6条安全红线
- Android中的Handler机制(二)