1.Callable与Runnable类似,都可以作为线程任务被执行,但是Callable可以返回线程执行结果(通过Future.get()方法)
2.ExectuorService包含几个submit方法,主要用到2个,如下
submit(Callable task)
submit(Runnable task)
3.ExecutorService可以通过Executors的几个工厂方法获得,比如:newSingleThreadExecutor();
4.ExecutorService的submit方法返回Future的实例
5.Future的get方法可以对submit方法提交的任务线程做如下操作
cancel(boolean isMayInterruptIfRunning)
isCanceled()
isDone()
get() throws InterruptException, ExecutionException
get(time, timeunit) throws InterruptException, ExecutionException
下面写代码实例
/**
*
* @author ietown
*
*/
public class Test {
private static ExecutorService exec = Executors.newSingleThreadExecutor();
public static void main(String[] args) {
Task task = new Task();
Future<Integer> future = exec.submit(task);
// 第二种方法
/*FutureTask<Integer> futureTask = new FutureTask<Integer>(task);
Thread thread = new Thread(futureTask);
thread.start();*/
System.out.println("睡1秒 前");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("睡1秒 后");
Integer result = 0;
try {
result = future.get();
// 第二种方法
/*result = futureTask.get();*/
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println("结果:" + result);
}
}
/**
*
* @author ietown
*
*/
public class Task implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("子线程开始。。。");
Thread.sleep(3000);
int he = 0;
for(int i = 0; i < 100; i++) {
he = he + i;
}
return he;
}
}