情况1:父线程结束,子线程跟着结束
方法:将子线程设置为父线程的守护线程即可,当主线程结束时,子线程自动结束。
情况2:父线程等子线程结束
方法1:最朴素的方法,while(子.isAlive==true) 蠢
方法2:子.join()
方法3:CountDownLatch cdl=new CountDownLatch(1);
父 cdl.await();
子 cdl.countDown();
方法4:阻塞队列 BlockingQueue queue = new ArrayBlockingQueue(1);
父 queue.take();
子 queue.put(“OK”);
方法5:Synchronized
父 wait
子 notify
方法6:CyclicBarrier barrier = new CyclicBarrier(2);
父 barrier.await();
子 barrier.await();
方法7:线程池+Feature
ExecutorService executorService = Executors.newFixedThreadPool(1);
Future future = executorService.submit(子线程);
future.get();父等待子完成
executorService.shutdown();
方法8:LockSupport
父 LockSupport.park();
子 运行完LockSupport.unpark(父线程)