在我们的生活中,常常会出现插队问题,比如说,当你准备干饭的时候,突然前面有个同学插到你前面去了,这时候你就很气愤,想要去惩罚插队者 然而在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插队即可
结果: