读书人

并发(1)

发布时间: 2012-09-09 09:27:54 作者: rapoo

并发(一)

原文链接:http://www.iteye.com/topic/366591

1:Executor类
子接口:ExecutorService,ScheduledExecutorService
执行已提交的Runnable任务对象。该接口将任务的提交和任务的运行相分离。通常使用该类而不是显示创建线程。

通常使用子接口ExecutorService来提交但返回值和不带返回值的任务,也可以执行关闭方法shutdown,拒接结束新的任务

2:Executors类

个人感觉主要使用该类返回的各种实力来创建线程

public class LiftOff implements Runnable{private int countDown = 10;private static int taskCount = 0;private final int id=taskCount++;public LiftOff() {}public LiftOff(int countDown) {this.countDown = countDown;}public static void main(String[] args) {new Thread(new LiftOff()).start();}@Overridepublic void run() {while(countDown-- > 0) {System.out.println(status());Thread.yield();}}public String status() {return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + ").";}}?

?

public class CachedThreadPool {public static void main(String[] args) {ExecutorService exe = Executors.newCachedThreadPool();//ExecutorService exe = Executors.newFixedThreadPool(5);//ExecutorService exe = Executors.newSingleThreadExecutor();for(int i=0;i<5;i++) {exe.execute(new LiftOff());}//防止新的任务提交给该Executorexe.shutdown();//抛出java.util.concurrent.RejectedExecutionException异常exe.execute(new LiftOff());}}

?3:Callable接口

该接口包含一个call()方法,用来代替runnable接口,在完成任务时返回一个值

? 4:Future接口

主要通过get()方法,来返回异步计算的结果

public class CallableDemo {public static void main(String[] args) {ExecutorService exe = Executors.newCachedThreadPool();ArrayList<Future<String>> results = new ArrayList<Future<String>>();for(int i=0;i<10;i++) {results.add(exe.submit(new TaskWithResult(i)));}for (Future<String> future : results) {try {//如果任务已完成,则返回 true。 可能由于正常终止、异常或取消而完成,//在所有这些情况中,此方法都将返回 true。if(future.isDone()) {System.out.println(future.get());//第一个参数:等待的时间     第二个参数:单位System.out.println(future.get(1, TimeUnit.SECONDS));}if(future.isCancelled()) {System.out.println("cancled.....");}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();} catch (TimeoutException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class TaskWithResult implements Callable<String> {private int id;public TaskWithResult(int id) {this.id=id;}public String call() throws Exception {return "result of TaskWithResult " + id;}}

?

读书人网 >编程

热点推荐