这是一道经典的Java多线程面试题,本人曾在京东遇到过,这里给出四种实现方式,当然不局限于这四种方式,另外个人强烈建议使用最后一种。
1、Thread + Daemon
package com.tj.ythu.thread.main;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class OneWaitTwoThread01 {
public static void main(String[] args) {
List<Boolean> list = Arrays.asList(true);
CountDownLatch countDownLatch = new CountDownLatch(2);
Thread a = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
countDownLatch.countDown();
list.set(0, false);
System.out.println("A任务超时了");
return;
}
System.out.println(Thread.currentThread().getName() + ":" + "我成功运行了");
countDownLatch.countDown();
}, "A");
a.start();
Thread b = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
countDownLatch.countDown();
list.set(0, false);
System.out.println("B任务超时了");
return;
}
System.out.println(Thread.currentThread().getName() + ":" + "我成功运行了")