炎热的夏天,一位少侠到客栈吃杯茶,客栈准备茶水有如下两种方式:
单线程
先擦桌子,花费3秒;
再准备茶水,花费3秒;
共花费6秒!
多线程
擦桌子和准备茶水同时进行,各自花费3秒(2个线程同时执行);
共花费3秒!
public static void main(String[] args) throws ExecutionException, InterruptedException {
long startTime = System.currentTimeMillis(); // 开始服务时间
FutureTask<String> teaTask = new FutureTask<String>(() -> { // 备茶任务
Thread.sleep(3000);
return "茶水小二:客官,茶水已备好......";
});
FutureTask<String> deskTask = new FutureTask<String>(() -> { // 清洁任务
Thread.sleep(3000);
return "服务员:客官,桌子擦干净了......";
});
new Thread(teaTask, "备茶线程").start();
new Thread(deskTask,"清洁线程").start();
System.out.println(teaTask.get()); // 阻塞等待备茶线程执行完成
System.out.println(deskTask.get()); // 阻塞等待清洁线程执行完成
long endTime = System.currentTimeMillis(); // 结束服务时间
System.out.println("客官请慢用!本次备茶和擦桌子共花费:"+(endTime-startTime)/1000+" 秒!");
}