java多线程笔记–多线程顺序执行
文章目录
参考: https://www.cnblogs.com/xiaoxi/p/8035725.html
https://blog.csdn.net/hefenglian/article/details/82596072
https://blog.csdn.net/Evankaka/article/details/80800081
1.java多线程笔记–顺序执行
1.使用join
如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B
2.使用CountDownLatch
await方法阻塞当前线程,当CountDownLatch减为0时就代表条件已成熟,所有因调用await方法而阻塞的线程都会被唤醒
3.使用阻塞队列,利用队列的FIFO特性
4.使用newSingleThreadExecutor内部,线程池的newSingleThreadExecutor内部使用一个容量不限的阻塞队列,同3类似
2.java多线程笔记–循环顺序打印问题
解决:3个线程1、2、3依次执行打印ABC,但是实际处理的时候不一定先执行线程1打印A,具体跟判断逻辑有关,比如先执行了线程3,但是run中判断满足条件才输出。
2.1通过Lock、3个Condition的等待唤醒机制和状态变量判断,来控制3个线程输出顺序
public class PrintABCByLockAndCondition {
private static Lock lock = new ReentrantLock();
private static Condition conditionA = lock.newCondition();
private static Condition conditionB = lock.newCondition();
private static Condition conditionC = lock.newCondition();
private static int status = 0;
public static void main(String[] args) {
new PrintABCByLockAndCondition().printABC();
}
public void printABC() {
ExecutorService service = Executors.newFixedThreadPool(3);
//线程的执行顺序跟提交顺序无关
service.execute(new RunnableC());
service.execute(new RunnableB());
service.execute(new RunnableA());
service.shutdown();
}
private class RunnableA implements Runnable {
@Override
public void run() {
try {
lock.lock();
while (true) {
while (status %