这种行为,我们俗称“占着茅坑不拉屎”。。。
如果在插队的时候给别人让位置
public class Main implements Runnable{
@Override
public void run() {
try {
// 子线程先延时100ms,让主线程先跑,以保证多次实验的一致性。
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 10; ++i) {
System.out.println("我是" + Thread.currentThread().getName() + " -" + i);
if (i == 4) {
// 小明拿着插队证,执行到一半后,开始疯狂谦让,但是被插队的主线程敢怒不敢言。。
// 于是,小明永远也无法把线程让出去,主线程也永远无法等到小明完成任务再继续自己的工作。。
// 可能,这就是传说中的死锁吧~
while (true){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread.yield();
}
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new Main(), "小明");
t1.start();
for (int i = 0; i < 10; ++i) {
System.out.println("我是主线程 -" + i);
if (i == 4) {
// 主线程执行到一半,小明来插队了。。
t1.join();
}
}
}
}
执行结果
我是主线程 -0
我是主线程 -1
我是主线程 -2
我是主线程 -3
我是主线程 -4
我是小明 -0
我是小明 -1
我是小明 -2
我是小明 -3
我是小明 -4
然后就一直阻塞着了。。。除非强制结束。