• 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();
    
    }
    
    }
  • 相关阅读:
    SPOJ ORDERSET
    BZOJ 1109: [POI2007]堆积木Klo
    BZOJ 1112: [POI2008]砖块Klo
    BZOJ 4144: [AMPPZ2014]Petrol
    BZOJ 4385: [POI2015]Wilcze doły
    BZOJ 1124: [POI2008]枪战Maf
    BZOJ 1123: [POI2008]BLO
    BZOJ 1121: [POI2008]激光发射器SZK
    BZOJ 1131: [POI2008]Sta
    BZOJ 4551: [Tjoi2016&Heoi2016]树
  • 原文地址:https://www.cnblogs.com/Toddll/p/7359852.html
Copyright © 2020-2023  润新知