请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我在您代码最后再加了一个打印thread1的状态,结果打印出waiting

老师,我在您代码最后再加了一个打印thread1的状态,结果打印出waiting,为什么thread1和thread2都是在waiting状态呢?为什么不是一个被blocked,一个在执行run方法里的wait呢?

正在回答

4回答

都是执行wait();,所以都是waiting状态

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕圣9338304 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-30 18:19:15
  • 提问者 qq_慕圣9338304 #2
    是不是由于线程1 sleep了1000ms然后进入了wait(),所以释放了锁,然后线程2拿到了锁并且在1000ms后也wait(),由于没有人去notify它们,所以他们就一直保持wait状态,所以打印出来时就是两个都在waiting?
    回复 有任何疑惑可以回复我~ 2020-01-30 18:26:21
  • 悟空 回复 提问者 qq_慕圣9338304 #3
    是对的
    回复 有任何疑惑可以回复我~ 2020-01-30 18:57:47
提问者 qq_慕圣9338304 2020-01-27 21:38:37

https://img1.sycdn.imooc.com//szimg/5e2ee7b90956763402400170.jpg

这是结果图

0 回复 有任何疑惑可以回复我~
提问者 qq_慕圣9338304 2020-01-27 21:34:08
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();
        }
    }
}


0 回复 有任何疑惑可以回复我~
悟空 2020-01-27 14:18:44

麻烦你把你的代码贴一下哈,我看了代码才能分析

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信