写点什么

如何让多个线程按顺序执行?

用户头像
Java鱼仔
关注
发布于: 2021 年 01 月 10 日

(一)每天一个知识点

如何让多个线程按顺序执行?


(二)结论

1.主线程中使用 join

2.子线程中使用 join

3.使用单一化线程池


(三)再多学一点

我们都知道线程的执行顺序是无序的,但是有的时候我们希望线程按顺序执行该怎么做呢?我在下面提供了三种方式:

1.主线程中使用 join


public static void main(String[] args) throws InterruptedException {    Thread a1=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"打开冰箱");        }    });    Thread a2=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"取出物品");        }    });    Thread a3=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"关闭冰箱");        }    });    a1.start();    a1.join();    a2.start();    a2.join();    a3.start();    a3.join();}
复制代码

2.子线程中使用 join


public static void main(String[] args) throws InterruptedException {    Thread a1=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"打开冰箱");        }    });    Thread a2=new Thread(new Runnable() {        @Override        public void run() {            try {                a1.join();            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName()+"取出物品");        }    });    Thread a3=new Thread(new Runnable() {        @Override        public void run() {            try {                a2.join();            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println(Thread.currentThread().getName()+"关闭冰箱");        }    });    a1.start();    a2.start();    a3.start();}
复制代码

3.使用单一化线程池,单一化线程池一次只提供一个线程,相当于单线程的操作。


static ExecutorService service= Executors.newSingleThreadExecutor();public static void main(String[] args) {    Thread a1=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"打开冰箱");        }    });    Thread a2=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"取出物品");        }    });    Thread a3=new Thread(new Runnable() {        @Override        public void run() {            System.out.println(Thread.currentThread().getName()+"关闭冰箱");        }    });    service.submit(a1);    service.submit(a2);    service.submit(a3);}
复制代码


发布于: 2021 年 01 月 10 日阅读数: 24
用户头像

Java鱼仔

关注

你会累是因为你在走上坡路 2020.12.26 加入

微信搜索《Java鱼仔》

评论

发布
暂无评论
如何让多个线程按顺序执行?