Java并发编程-Executor框架_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java并发编程-Executor框架

Java并发编程-Executor框架

 2012/4/23 12:40:11  lemon_1227  程序员俱乐部  我要评论(0)
  • 摘要:1、Executor框架:异步任务执行框架。提供了对生命周期的支持,以及统计信息收集,应用程序管理和性能监视等机制。·基于生产者-消费者模式。·将任务提交过程与任务执行过程解耦,并且用Runnable来表示任务2、线程池·newFixedThreadPool:创建一个固定长度的线程池。·newCachedThreadPool:创建一个可缓存的线程池。·newSingleThreadPool:是一个单线程的线程池,按照任务在队列中的顺序来串行执行[FIFO,LIFO,优先级]等。
  • 标签:Java 编程 Java并发
1、Executor 框架:异步任务执行框架。提供了对生命周期的支持,以及统计信息收集,应用程序管理和性能监视等机制。
·基于生产者-消费者模式。
·将任务提交过程与任务执行过程解耦,并且用Runnable来表示任务
2、线程
·newFixedThreadPool:创建一个固定长度的线程池。
·newCachedThreadPool:创建一个可缓存的线程池。
·newSingleThreadPool:是一个单线程的线程池,按照任务在队列中的顺序来串行执行[FIFO,LIFO,优先级]等。
·newScheduledThreadPool:创建一个固定长度的线程池,并且以定时或者延时的方式执行任务。
3、Executor生命周期
·ExecutorService的生命周期有3种状态:运行,关闭,已终止。
·ExecutorService创建时就处于运行状态。
·shutdown方法将执行平缓的关闭过程:不接受新的任务,同时等待已提交的任务执行完成,保护还未开始执行的任务
4、Executor类只提供线程池的功能,并不提供生命周期监控的功能。
   ExecutorService类不仅提供了线程池,而且具有生命周期监控等功能。
5、Executor.execute(Runnable command
   Future<T> future = ExecutorService.submit(Callable<T> task)
   List<Future<T>> list = ExecutorService.invokeAll(Collection<Callable<T>> tasks, timeout, unit)


6、应用:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TaskExecution {
	private static final ExecutorService exec = Executors.newFixedThreadPool(4);

	public static void main(String[] args) {
 
			Callable<String> task = new Callable<String>() {

				@Override
				public String call() throws Exception {
					Thread.sleep(1000);
					return "success";
				}
				 
			};  
			Future<String> future= exec.submit(task); 
			 
//		try {
//			Thread.sleep(1000);
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		System.out.println("isTerminate = "+exec.isTerminated());
		
		try {
			System.out.println("future.get = "+future.get(800,TimeUnit.NANOSECONDS));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			exec.shutdown();
		} catch (ExecutionException e) {
			 
			e.printStackTrace();
			exec.shutdown();
		} catch (TimeoutException e) {
			e.printStackTrace();
			future.cancel(true);
			exec.shutdown();
		}
	
		System.out.println("------------");
	}
}
发表评论
用户名: 匿名