在java的多线程里面,如何保证多个子线程按照顺序进行执行

提问者:帅平 问题分类:微服务
在java的多线程里面,如何保证多个子线程按照顺序进行执行?如图3个线程,每次执行的时候,线程执行顺序都是随机的。

 您阅读本篇文章共花了: 

4 个回答
Rae
Rae 管理员
在java8中可以使用CompletableFuture,可以指定执行顺序,例如:
Thread t1 = new Thread(new Task(),"线程1");
        Thread t2 = new Thread(new Task(),"线程2");
        Thread t3 = new Thread(new Task(),"线程3");
        CompletableFuture.runAsync(()-> t1.start())
                .thenRun(()->t2.start())
                .thenRun(()->t3.start());
发布于:2年前 (2022-10-19) IP属地:未知
Rae
Rae 管理员
第三种方式是在executors里面,有一个newSingleThreadExecutor()方法,向这个线程池里面添加任务也是按照顺序执行的。
发布于:2年前 (2022-10-19) IP属地:未知
Rae
Rae 管理员
第二种是使用CountDownLatch方式。
CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。它相当于是一个计数器,这个计数器的初始值就是线程的数量,每当一个任务完成后,计数器的值就会减一,当计数器的值为 0 时,表示所有的线程都已经任务了,然后在 CountDownLatch 上等待的线程就可以恢复执行接下来的任务。

发布于:2年前 (2022-10-19) IP属地:未知
Rae
Rae 管理员
第一种方式,可以使用join的方式,例如:
假设现在有3个线程,A,B,C,要求按照A,B,C的顺序进行执行,那么我们在第二个线程里面添加一个 thread1.join(),在第三个线程里面添加thread2.join()即可

发布于:2年前 (2022-10-19) IP属地:未知
我来回答