Java多线程里的join插队方法

189 阅读2分钟

image.png

在我们的生活中,常常会出现插队问题,比如说,当你准备干饭的时候,突然前面有个同学插到你前面去了,这时候你就很气愤,想要去惩罚插队者 然而在java的多线程应用中,插队似乎已经见怪不怪了,然而,编程语言毕竟是要讲究逻辑的,就像别人吃饭插队可能是人家饿了,java多线程插队就是某个程序的优先级较高,想要优先处理或者事件处理的某个环节突然加入。那么接下来就让我们简要了解一下java的join插队问题

首先基本语法为:XXX.join(); 这里的XXX往往是需要插队的线程名

让我们简要的看个案例:案例中需要在主线程中输出10个hi,但是在输出第五个hi的时候,需要加入一个子线程,然后完成子线程中输出10个hello的任务

首先我们需要创建子线程,在这里我们就以T为子线程名好了,但是不要忘记,创建线程的方式有两种: 第一种是继承Thread线程类,然后重写Thread类里面的run方法。 第二种是实现Runnable接口,然后重写Thread类中的run方法。 因为此案例并未涉及复杂的类继承问题,所以我们就以第一种继承方式讲解(Runnable的创建也有)

代码如下:


class T extends Thread {  
@Override  
public void run() {  

}  
}  

class T1 implements Runnable{  
@Override  
public void run() {  
  
}  
}

然后根据需求,因为子线程内要实现输出10个hello,我们便利用for寻循环即可

for (int i = 0; i < 10; i++) {  
try {  
Thread.sleep(1000);  
} catch (InterruptedException e) {  
throw new RuntimeException(e);  
}  
System.out.println("hello");  
}

接下来,我们简要分析一下,如何实现这个插队

第一步:我们先要让主线程中的hi打印出来 第二步,让hi打印到第五次时候,插入子线程任务

那么我们来实现一下:

XXXX main(String args[])throws InterruptedException{
T t = new T();
for (int i = 0;i<10;i++)  
{  
if(i==5){  
t.start();  
t.join();  
}  
System.out.println("hi"+i);  
}
}

在i输出第五次的时候启动子线程,然后join插队即可

结果:

image.png