方法一:LockSupport + AtomicInteger
先执行线程C,用 park() 挂起线程C,线程A、B各自执行完成时,flag 减1并判断是否为0,若为0则用unpark( c )给线程C颁发许可
public static void main(String[] args) {
AtomicInteger flag = new AtomicInteger(2);
Thread c = new Thread(()->{
System.out.println("线程C开启,等待线程A、B执行完成才继续执行");
LockSupport.park();
System.out.println("线程C开始执行");
});
c.start();
new Thread(()->{
System.out.println("线程A开始执行");
try {
TimeUnit.SECONDS.sleep(new Random().nextInt(10));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程A执行完成");
if (flag.decrementAndGet() == 0){
//唤醒指定线程
LockSupport.unpark