Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
ExecutorService:线程池类
<T> Future<T> submit(Callable<T> task):获取线程池中的某一个线程对象,并执行线程中的call()方法
Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用
使用线程池中线程对象的步骤:
1创建线程池对象
2创建Callable接口子类对象
3提交Callable接口子类对象
4关闭线程池
代码展示:
import java.util.concurrent.Callable;
public class MyCallable implements Callable<Long> {
private int num;
public MyCallable(int num) {
this.num = num;
}
public Long call() throws Exception {
long count=1;
for (int i=1;i<=num;i++){
count=count*i;
}
return count;
}
}
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Demo03 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建线程任务对象
MyCallable mc1=new MyCallable(10);
MyCallable mc2=new MyCallable(20);
//获取线程池
ExecutorService es= Executors.newFixedThreadPool(2);
//执行线程任务
Future f1=es.submit(mc1);
Future f2=es.submit(mc2);
System.out.println(f1.get()+"..."+f2.get());
}
}