多线程callable
传统的thread里面,在执行完任务之后无法获取执行结果。通过共享变量或者使用线程通信获取结果,比较麻烦。
就是Runnable接口,线程的真正业务在run里面。
jdk1.5 开始提供Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。
二 future
Callable 和Future位于java.util.concurrent 包下。
Callable 是个接口,只有一个方法call().通常配合ExecutorService使用。
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
package com.hanshow.testThread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class TestCallable {
static class SumTask implements Callable<Long> {
@Override
public Long call() throws Exception {
long sum = 0;
for (int i = 0; i < 9000; i++) {
sum += i;
}
return sum;
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("Start:" + System.nanoTime());
FutureTask<Long> futureTask = new FutureTask<Long>(new SumTask());
Executor executor=Executors.newSingleThreadExecutor();
executor.execute(futureTask);
System.out.println(futureTask.get());
System.out.println("End:" + System.nanoTime());
}
}
还没有评论,来说两句吧...