多线程--future模式初体验
第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。 创建个线程池: private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task")); 创建任务列表futureTaskList
taskList是业务内容,它的长度是线程数,也是循环次数。
List<Future<Map<String,Object>>> futureTaskList = Lists.newArrayListWithCapacity(taskList.size()); for(String task : taskList) { futureTaskList.add(cachedThreadPool.submit(new Callable<Map<String,Object>>(){ @Override public Map<String,Object> call() throws Exception { //task相关业务 ... return map; } })); } 等待返回结果,用future.get()获取结果。
List<Map<String,Object>> AllDataList = new ArrayList<>(); for(Future<Map<String,Object>> future : futureTaskList){ try { AllDataList.add(future.get()); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); } } 关闭线程池
try { // 通知 cachedThreadPool.shutdown(); // (所有的任务都结束的时候,返回TRUE) if(!cachedThreadPool.awaitTermination(awaitTime, TimeUnit.MILLISECONDS)){ // 超时的时候向线程池中所有的线程发出中断(interrupted)。 cachedThreadPool.shutdownNow(); } } catch (InterruptedException e) { // awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。 System.out.println("awaitTermination interrupted: " + e); cachedThreadPool.shutdownNow(); }第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。 创建个线程池: private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task")); 创建任务列表futureTaskList taskList是业务内容,它的长度是线程数,也是循环次数。 List
上一篇:
IDEA上Java项目控制台中文乱码