多线程实现顺序运行
1、在子线程中通过join()方法指定顺序
通过join()
方法使当前线程“阻塞”,等待指定线程执行完毕后继续执行。
“
举例:在线程thread2中,加上一句thread1.join(),其意义在于,当前线程2运行到此行代码时会进入阻塞状态,直到线程thread1执行完毕后,线程thread2才会继续运行,这就保证了线程thread1与线程thread2的运行顺序。
”
1 | public class ThreadJoinDemo { |
运行结果:
1 | 打开冰箱! |
2、在主线程中通过join()方法指定顺序
简单说一下子线程与主线程的区别,子线程指的是发生在Thread内部的代码,主线程指的是发生在main函数中的代码。
我们可以在main函数中通过join()
方法让主线程阻塞等待以达到指定顺序执行的目的。
1 | public class ThreadMainJoinDemo { |
输出结果:
1 | 打开冰箱! |
3、通过倒数计时器CountDownLatch实现
CountDownLatch通过计数器提供了更灵活的控制,只要检测到计数器为0当前线程就可以往下执行而不用管相应的thread是否执行完毕。
1 | public class ThreadCountDownLatchDemo { |
输出结果:
1 | 打开冰箱! |
4、通过创建单一化线程池newSingleThreadExecutor()
实现
单线程化线程池(newSingleThreadExecutor)的优点,串行执行所有任务。
1 | public class ThreadPoolDemo { |
输出结果:
1 | 打开冰箱! |