线程执行顺序怎么控制?

简介: 线程执行顺序怎么控制?

假设有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

可以使用join方法解决这个问题。比如在线程A中,调用线程B的join方法表示的意思就是:A等待B线程 执行完毕后(释放CPU执行权),在继续执行。

代码如下:

publicclassThreadTest {
publicstaticvoidmain(String[] args) {
Threadspring=newThread(newSeasonThreadTask("春天"));
Threadsummer=newThread(newSeasonThreadTask("夏天"));
运行结果:Threadautumn=newThread(newSeasonThreadTask("秋天"));
try {
//春天线程先启动spring.start();
//主线程等待线程spring执行完,再往下执行spring.join();
//夏天线程再启动summer.start();
//主线程等待线程summer执行完,再往下执行summer.join();
//秋天线程最后启动autumn.start();
//主线程等待线程autumn执行完,再往下执行autumn.join();
        } catch (InterruptedExceptione) {
e.printStackTrace();
        }
    }
}
classSeasonThreadTaskimplementsRunnable {
privateStringname;
publicSeasonThreadTask(Stringname){
this.name=name;
    }
@Overridepublicvoidrun() {
for (inti=1; i<4; i++) {
System.out.println(this.name+"来了: "+i+"次");
try {
Thread.sleep(100);
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
         }
    }
}

运行结果:

春天来了: 1春天来了: 2春天来了: 3夏天来了: 1夏天来了: 2夏天来了: 3秋天来了: 1秋天来了: 2秋天来了: 3
相关文章
|
Java 调度
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
|
Java
【高并发】线程的执行顺序没你想的那么简单
调用Thread的start()方法启动线程时,线程的执行顺序是不确定的。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序。
306 1
【高并发】线程的执行顺序没你想的那么简单
|
编译器 Linux 调度
线程 - 线程优先级的高低和执行顺序的关系
线程 - 线程优先级的高低和执行顺序的关系
223 0
|
Java
注意:线程的执行顺序与你想的并不一样!!
调用Thread的start()方法启动线程时,线程的执行顺序是不确定的。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序,今天,我们就一起来看看线程到底是如何执行的,它的执行顺序又是怎样的呢?
932 0
注意:线程的执行顺序与你想的并不一样!!
高并发之——线程的执行顺序
调用Thread的start()方法启动线程时,线程的执行顺序是不确定的。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序。
168 0
|
Java
java 中线程执行顺序控制
[java] view plain copy   Thread t1 = new Thread(new Runnable() {          @Override       public void run() {           System.
529 0
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
55 1
C++ 多线程之初识多线程