在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());

发布于:1个月前 (10-19)
Rae
Rae 管理员

第三种方式是在executors里面,有一个newSingleThreadExecutor()方法,向这个线程池里面添加任务也是按照顺序执行的。

发布于:1个月前 (10-19)
Rae
Rae 管理员

第二种是使用CountDownLatch方式。

CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。它相当于是一个计数器,这个计数器的初始值就是线程的数量,每当一个任务完成后,计数器的值就会减一,当计数器的值为 0 时,表示所有的线程都已经任务了,然后在 CountDownLatch 上等待的线程就可以恢复执行接下来的任务。

发布于:1个月前 (10-19)
Rae
Rae 管理员

第一种方式,可以使用join的方式,例如:

假设现在有3个线程,A,B,C,要求按照A,B,C的顺序进行执行,那么我们在第二个线程里面添加一个 thread1.join(),在第三个线程里面添加thread2.join()即可

发布于:1个月前 (10-19)
我来回答