主线程获得子线程中数据

场景:一个线程继续执行,需要另一个线程执行完

方法一

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("主线程执行完");
}

猜你喜欢

转载自blog.csdn.net/fenkanghong9779/article/details/111882573