每天一个知识点(三)如何让多个线程按顺序执行?

简介: 每天一个知识点(三)如何让多个线程按顺序执行?

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


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


(二)结论


1.主线程中使用join 2.子线程中使用join 3.使用单一化线程池


(三)再多学一点


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


publicstaticvoidmain(String[] args) throwsInterruptedException {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
a1.start();
a1.join();
a2.start();
a2.join();
a3.start();
a3.join();
}

2.子线程中使用join

publicstaticvoidmain(String[] args) throwsInterruptedException {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
try {
a1.join();
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
try {
a2.join();
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
a1.start();
a2.start();
a3.start();
}

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

staticExecutorServiceservice=Executors.newSingleThreadExecutor();
publicstaticvoidmain(String[] args) {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
service.submit(a1);
service.submit(a2);
service.submit(a3);
}


相关文章
|
2月前
|
安全 Java
Java多线程(全知识点)(下)
Java多线程(全知识点)(下)
52 0
|
25天前
|
安全 Java 编译器
JAVA-多线程知识点总结(二)
JAVA-多线程知识点总结(二)
|
2月前
|
Java 调度
Java多线程(全知识点)(上)
Java多线程(全知识点)
61 0
|
2月前
|
存储 安全 Java
并发编程知识点(volatile、JMM、锁、CAS、阻塞队列、线程池、死锁)
并发编程知识点(volatile、JMM、锁、CAS、阻塞队列、线程池、死锁)
80 3
|
11天前
|
Oracle Java 关系型数据库
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
14 0
|
25天前
|
设计模式 安全 Java
JAVA-多线程知识点总结(三)
JAVA-多线程知识点总结(三)
|
25天前
|
Java 调度
JAVA-多线程知识点总结(一)
JAVA-多线程知识点总结(一)
|
2月前
|
Java
java线程知识点总结
Java线程核心概念:线程是程序执行流,一个进程可有多个线程。创建线程通过继承Thread或实现Runnable接口。线程状态包括新建、就绪、运行、阻塞、等待、超时等待和终止。同步用synchronized或Lock防止数据不一致,避免死锁。线程间通过共享变量、wait/notify通信。线程池(如ThreadPoolExecutor、ScheduledThreadPoolExecutor)优化性能和资源管理。
20 6
|
2月前
|
安全 算法 Java
多线程知识点总结
多线程知识点总结
44 3
|
2月前
|
资源调度 Java 程序员
Java线程知识点总结
Java线程知识点总结