java.util.concurrent包下,有以下方法:
cancel(boolean var1):取消Callable任务,未开始或已完成返回false,boolean参数表示是否中断执行中的Callable任务isCanceled():判断Callable任务是否取消了isDone():判断是否完成get():获得Callable的返回值get(long time, TimeUnit unit):设置超时时间,防止无限时间的等待 二、CompletionStage接口和CompletableFuture类
java.util.concurrent包下,jdk1.8才引入。用于阶段处理,实现链式的阶段型的操作,使线程与线程之间可以愉快的进行对话。目前只有CompletableFuture一个实现类。先看其中部分方法(3个一组,共15个方法):
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main线程start");
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程名称:" + Thread.currentThread().getName());
return 1;
}).thenRunAsync(() -> {
System.out.println("线程名称:" + Thread.currentThread().getName());
}, EXECUTOR_SERVICE);
future.get();
System.out.println("main线程end");
}
输出结果:
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main线程start");
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程名称:" + Thread.currentThread().getName());
return 1;
}).thenAccept((t) -> {
System.out.println("线程名称:" + Thread.currentThread().getName());
System.out.println(t);
});
future.get();
System.out.println("main线程end");
}
输出结果:
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main线程start");
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程名称:" + Thread.currentThread().getName());
return 1;
}).thenApply((t) -> {
System.out.println("线程名称:" + Thread.currentThread().getName());
System.out.println(t);
return t;
});
Integer t = future.get();
System.out.println("返回结果:" + t);
System.out.println("main线程end");
}
输出结果:
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main线程start");
CompletableFuture f1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("f1线程名称:" + Thread.currentThread().getName());
return 1;
});
CompletableFuture f2 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("f2线程名称:" + Thread.currentThread().getName());
return 2;
}).thenCombine(f1, (t, u) -> {
System.out.println("结合后线程名称:" + Thread.currentThread().getName());
System.out.println("t:" + t);
System.out.println("u:" + u);
return t + u;
});
Integer result = f2.get();
System.out.println("返回结果:" + result);
System.out.println("main线程end");
}
输出结果:



