老师,我在您代码最后再加了一个打印thread1的状态,结果打印出waiting
来源:6-5 阻塞的含义

qq_慕圣9338304
2020-01-25
老师,我在您代码最后再加了一个打印thread1的状态,结果打印出waiting,为什么thread1和thread2都是在waiting状态呢?为什么不是一个被blocked,一个在执行run方法里的wait呢?
写回答
4回答
-
都是执行wait();,所以都是waiting状态
032020-01-30 -
qq_慕圣9338304
提问者
2020-01-27
这是结果图
00 -
qq_慕圣9338304
提问者
2020-01-27
package threadcoreknowledge.sixstates; /* 展示blocked,waiting,timed-waiting三种状态 */ public class blockedwaitingtimedwaiting implements Runnable{ public static void main(String[] args) { blockedwaitingtimedwaiting runnable=new blockedwaitingtimedwaiting(); Thread thread1=new Thread(runnable); thread1.start(); Thread thread2=new Thread(runnable); thread2.start(); try{ Thread.sleep(5); }catch (InterruptedException e){ e.printStackTrace(); } //打印出timed-waiting状态,因为正在执行Thread.sleep(1000) System.out.println(thread1.getState()); //打印出blocked状态,因为thread2想拿到syn()的锁却拿不到 System.out.println(thread2.getState()); try{ Thread.sleep(2000); }catch (InterruptedException e){ e.printStackTrace(); } //打印出waiting状态,由于等了2000ms,在下面run方法中进入了wait(),所以确保是在waiting状态 System.out.println(thread2.getState()); System.out.println(thread1.getState()); } @Override public void run() { syn(); } private synchronized void syn(){ try{ Thread.sleep(1000); wait(); }catch (InterruptedException e){ e.printStackTrace(); } } }
00 -
悟空
2020-01-27
麻烦你把你的代码贴一下哈,我看了代码才能分析
00
相似问题