场景:一个线程继续执行,需要另一个线程执行完
方法一
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("当前线程"+Thread.currentThread()+"开始");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("当前线程"+Thread.currentThread()+"结束");
},"线程1");
Thread thread2 = new Thread(() -> {
System.out.println("当前线程"+Thread.currentThread()+"开始");
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("当前线程"+Thread.currentThread()+"结束");
},"线程2");
thread2.start();
}
方法2
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch=new CountDownLatch(2);
Thread thread = new Thread(() -> {
System.out.println("当前线程"+Thread.currentThread()+"开始");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("当前线程"+Thread.currentThread()+"结束");
countDownLatch.countDown();
},"线程1");
Thread thread2 = new Thread(() -> {
System.out.println("当前线程"+Thread.currentThread()+"开始");
System.out.println("当前线程"+Thread.currentThread()+"结束");
countDownLatch.countDown();
},"线程2");
thread.start();
thread2.start();
countDownLatch.await();
System.out.println("主线程执行完");
}