zoukankan      html  css  js  c++  java
  • Which statement is true?

    void waitForSignal()
    {
        Object obj = new Object();
        synchronized(Thread.currentThread())
        {
            obj.wait();
            obj.notify();
        }
    }
    This code may throw an InterruptedException
    This code may throw an IllegalStateException
    This code may throw a TimeOutException after ten minutes
    This code will not compile unless”obj.wait()”is replaced with”(Thread)obj).wait()”
    Reversing the order of obj.wait()and obj.notify()may cause this method to complete normally

    解析:

    这题有两个错误的地方,第一个错误是 wait() 方法要以 try/catch 包覆,或是掷出 InterruptedException 才行   
    因此答案就是因为缺少例外捕捉的   InterruptedException

    第二个错误的地方是, synchronized 的目标与 wait() 方法的物件不相同,会有 IllegalMonitorStateException ,不过 InterruptedException 会先出现,所以这不是答案

    最后正确的程式码应该是这样:   
      

       void waitForSignal() {
    
    Object obj = new Object();
    
             synchronized (obj) {
    
                 try {
    
    obj.wait();
    
    } catch (InterruptedException e) {
    
    e.printStackTrace();
    
    }
    
    obj.notify();
    
    }
    
    }
  • 相关阅读:
    排座椅
    关于math.h的问题
    客户调查
    排队打水
    删数游戏
    小数背包
    零件分组
    桐桐的组合
    桐桐的数学游戏
    桐桐的全排列
  • 原文地址:https://www.cnblogs.com/Toddll/p/7359852.html
Copyright © 2011-2022 走看看