Java并发--任务执行.
转自:http://www.iteye.com/topic/694591
?
?? 这篇文章就主要讨论讨论Java并发中的任务执行,来作为我整理的地一篇文章吧。 文中难免有错,如果发现问题,可以即时站内或者回帖交流。
? OK,言归正传
?
首先来看一下,任务的定义:
?所谓的任务,就是抽象,离散的工作单位。你可以简单理解为代码级别的 (Runnable接口)
?大多数并发应用程序都是围绕着任务进行管理的.
?我们来看一小段代码:
- package com.ivan.concurrent.charpter6;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 FutureRenderer2 {private static final int NTHREADS=100;private static final ExecutorService exec=Executors.newFixedThreadPool(NTHREADS);void renderPage(CharSequence source){final List<ImageInfo> imageinfos=scanForImageInfo(source);CompletionService<ImageData> completionService=new ExecutorCompletionService<ImageData>(exec);for(final ImageInfo imageinfo:imageinfos){completionService.submit(new Callable<ImageData>(){public ImageData call() throws Exception {//提高性能点一: 将顺序的下载,变成并发的下载,缩短下载时间return imageinfo.downloadImage();}});}renderText(source);try {for(int i=0;i<imageinfos.size();i++){Future<ImageData> f=completionService.take();//提高性能点二: 下载完成一张图片后,立刻渲染到页面。ImageData imagedata=f.get();reanderImage(imagedata);}} catch (InterruptedException e) {Thread.currentThread().interrupt();}catch(ExecutionException e){e.printStackTrace();}}private void renderText(CharSequence source) {// TODO Auto-generated method stub}private void reanderImage(ImageData data) {// TODO Auto-generated method stub}private List<ImageInfo> scanForImageInfo(CharSequence source) {// TODO Auto-generated method stubreturn null;}}
?
?
?附件是整理的doc版本, 总感觉在JE把doc里面的文章复制过来,会有排版问题,所有干脆把doc也一起发上来。
?
?OK, 文章先写道这里, 本文参考于Java并发大师Brian Goetz的 《Java并发编程与实践》第6章, 文中有自己的一些理解,也可以算是读书笔记。?
?????? 最近离职,正在找下家中,同时也利用这段空闲时间,准备将自己以前的一些知识做一些整理,做成博文发上来与JE的朋友共享一下,相互交流,在互动的同时,实际上也是在对自己以前的知识做一遍巩固与复习。 就以这篇文章开头,做为并发系列的开头,后续如果时间充足的话,会继续将相关知识发上。