1.查看Callable的api
2.查看Callable的接口中的方法
一个可以获取结果的执行的线程
3.查看Future接口的api
4.查看Future接口中的内容
用于获取执行后的结果的接口
5.查看Executors工具类的api
6.查看Executors中的方法
一个用于创建ExecutorService的工具类
7.查看ExecutorService的api
8.查看ExecutorService的方法
9.例子
/**
* @description 用于测试Callable接口和Future接口
* @author hy
* @date 2019-10-12
*/
public class CallableAndFutureTest {
public static void main(String[] args) {
CallableAndFutureTest caft=new CallableAndFutureTest();
caft.testCallableAndFuture();
}
public void testCallableAndFuture() {
// 创建固定的线程执行器为:3个
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<Integer> sumFuture = executorService.submit(new Sum());
Future<Integer> maxFuture = executorService.submit(new Max(5, 6));
Future<Integer> minFuture = executorService.submit(new Min(5, 6));
int sum = 0;
int max = 0;
int min = 0;
try {
sum = sumFuture.get(1000, TimeUnit.MILLISECONDS);
max = maxFuture.get(1000, TimeUnit.MILLISECONDS);
min = minFuture.get(1000, TimeUnit.MILLISECONDS);
System.out.println("当前sumFuture执行任务后的结果:sum=" + sum);
System.out.println("当前maxFuture执行任务后的结果:max=" + max);
System.out.println("当前minFuture执行任务后的结果:min=" + min);
} catch (Exception e) {
e.printStackTrace();
} finally {
executorService.shutdown();
}
}
// 执行1+。。。100之间的和
class Sum implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
}
class Max implements Callable<Integer> {
private int num1;
private int num2;
public Max(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
@Override
public Integer call() throws Exception {
if (num1 > num2) {
return num1;
}
return num2;
}
}
class Min implements Callable<Integer> {
private int num1;
private int num2;
public Min(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
@Override
public Integer call() throws Exception {
if (num1 > num2) {
return num2;
}
return num1;
}
}
}
结果:
10.总结
1.Executors是用来创建执行执行的线程方式的ExecutorService的
2.Executors.newFixedThreadPool
是用来指定固定执行的线程数量
,不够就等待执行
3.ExecutorService适用来执行线程和方法的通过execute方法执行Runnable的实现类
,使用submit方法执行Callable的实现类
4.ExecutorService执行完毕
后一定要调用shutdown方法
,否则主线程阻塞
!
5.通过Future.get
方法可以获取执行任务后的结果
,可以规定再指定时间内获取结果
!
以上村塾个人见解,如有问题请联系本人!