首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java wait方法的工作原理

Java wait方法的工作原理
EN

Stack Overflow用户
提问于 2018-03-29 14:54:14
回答 1查看 160关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
   public class ThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        ThreadImpl thr = new ThreadImpl();
        thr.start();
        Thread.sleep(1000);
        synchronized(thr){
            System.out.println( "MAIN "+thr.hashCode());
            System.out.println("Main -->got the lock");
            thr.wait();
            System.out.println("Main -->Done with waiting");
        }
    }
}

class ThreadImpl extends Thread{
    public synchronized void sayHello(){
        System.out.println("Ssay hello ");
    }
    @Override
    public void run() {
        synchronized(this){
            System.out.println( "METHOD "+this.hashCode());
            System.out.println("METHOD Got the lock ");
            System.out.println("METHOD Going for sleep ");
                for(int i =0;i< 100000;i++);
            try {
                Thread.sleep(2000);
                System.out.println("METHOD Woke up ");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("METHOD Done leaving the thread");
        }
    }
}

在ThreadDemo的main方法中,我创建了一个线程对象ThreadImpl并启动它。接下来,主线程休眠1000ms。线程的run方法将在一个单独的thread.As部分中执行,它循环100000次,休眠2000ms。然后它退出该方法。主线程唤醒并获取"thr“的锁,然后进入等待状态。因为另一个线程已经完成了它的执行,这个等待应该是永远的。然而,我看到了以下结果:

方法1729414014

方法获得了锁

进入睡眠状态的方法

方法被唤醒

方法已完成离开线程

MAIN 1729414014

Main -->获得锁

Main -->等待完成

当没有人通知main方法时,它是如何继续执行的呢?

EN

回答 1

Stack Overflow用户

发布于 2018-03-29 22:02:36

这是虚假唤醒,请参阅jls

由于以下任何一种操作,线程可能会从等待集中删除,并将在稍后的某个时间恢复:

  • 在m上执行的通知操作,其中t被选择从等待集中删除。
  • 在m上执行的notifyAll操作。
  • 在t上执行的中断操作。
  • 如果这是定时等待,则是从m的等待集中删除t的内部操作,该内部操作在执行此wait action.
  • An内部操作开始至少毫秒加纳秒之后发生。虽然不鼓励,但允许实现执行“伪唤醒”,即从等待集中移除线程,从而能够在没有显式指令执行so.

的情况下恢复

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49549773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档