代码
t.join();
表示:线程t插队 main被阻塞 需要等待t执行完毕后main再继续
package cn.hanquan.test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestJoin {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
}
});
t.start();
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
if (i == 20)
t.join();// 线程t插队 main被阻塞 需要等待t执行完毕后main再继续
}
}
}
查看线程的状态
以下为常见的线程状态:
使用getState()
查看线程的状态的示例代码:
package cn.hanquan.test;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* yield礼让线程,直接进入就绪状态,不是阻塞状态
*/
public class TestJoin {
public static void main(String[] args) throws InterruptedException {
// 一个独立的线程
Thread t = new Thread(() -> {
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
}
});
t.start();
// 一个能够检测线程t的-状态的线程
Thread h = new Thread(() -> {
while (t.getState() != Thread.State.TERMINATED) {
System.out.println("线程Thread-0的状态是" + t.getState());
}
});
h.start();
// 主线程
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
if (i == 20)
t.join();// 线程t插队 main被阻塞 需要等待t执行完毕后main再继续
}
}
}