龙空技术网

Java如何保证多个线程按照顺序执行呢?Thread的join方法详解

AndyJoo 114

前言:

目前我们对“java如何实现多线程的运行”都比较珍视,我们都需要了解一些“java如何实现多线程的运行”的相关资讯。那么小编也在网络上收集了一些对于“java如何实现多线程的运行””的相关内容,希望小伙伴们能喜欢,朋友们一起来学习一下吧!

Thread类的join(long millis)和join()方法源码如下:

图1 Thread类join(long miils)方法源码

图2 Thread类join()方法源码

Thread中join方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的join()方法,表示B线程直到线程A执行完毕后,才会继续执行线程B。join(long millis)方法的作用,是等待这个线程millis毫秒数后结束,即最多等待millis时间即可执行当前线程;如果millis为0,意味着必须等待这个线程执行完毕,即t.join()方法阻塞调用此方法的线程(calling thread)进入 TIMED_WAITING 状态,直到线程t完成,此线程再继续

下面我们用代码来实现:有3个线程A、B、C,让线程按照A、B、C执行顺序执行。

代码样例:

图3 代码实现线程顺序执行

运行结果:

图4 执行结果

源码:

package org.andy.effective.java.study;public class TheadJoinTest {	public static void main(String[] args) throws InterruptedException {		final Thread thread1 = new Thread(new Runnable() {			@Override			public void run() {				// 线程进入标志				System.out.println(Thread.currentThread().getName() + " Start");				// 模拟处理业务				System.out.println(Thread.currentThread().getName() + " DoSomething");				// 线程结束标志				System.out.println(Thread.currentThread().getName() + " End");			}		}, "Thread A");		final Thread thread2 = new Thread(new Runnable() {			@Override			public void run() {				// 线程进入标志				System.out.println(Thread.currentThread().getName() + " Start");				// 加入线程A,表示线程B处理业务之前必须等A线程执行完毕				try {					thread1.join();				} catch (InterruptedException e) {					e.printStackTrace();				}				// 模拟处理业务				System.out.println(Thread.currentThread().getName() + " DoSomething");				// 线程结束标志				System.out.println(Thread.currentThread().getName() + " End");			}		}, "Thread B");		Thread thread3 = new Thread(new Runnable() {			@Override			public void run() {				// 线程进入标志				System.out.println(Thread.currentThread().getName() + " Start");				// 加入线程B,表示线程C处理业务之前必须等B线程执行完毕				try {					thread2.join();				} catch (InterruptedException e) {					e.printStackTrace();				}				// 模拟处理业务				System.out.println(Thread.currentThread().getName() + " DoSomething");				// 线程结束标志				System.out.println(Thread.currentThread().getName() + " End");			}		}, "Thread C");		System.out.println("Main Thread begin to start threads!");		// 这里三个线程的启动顺序可以任意,大家可以试下		thread2.start();		thread3.start();		thread1.start();		// 主线程要等待C线程执行完毕,才能继续主线程逻辑		thread3.join();		System.out.println("Main Thread End!");	}}

标签: #java如何实现多线程的运行 #java多个方法执行顺序 #java多个方法执行顺序怎么设置 #java多个方法执行顺序怎么设置的