zoukankan      html  css  js  c++  java
  • Thread类的常见问题

    void waitForSignal()
    {
        Object obj = new Object();
        synchronized(Thread.currentThread())
        {
            obj.wait();
            obj.notify();
        }
    }

    解析:

    这题有两个错误的地方,第一个错误是 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();
    
                }
    
            }

    总结:

    第一,记住wait必须要进行异常捕获
    第二,记住调用wait或者notify方法必须采用当前锁调用,即必须采用synchronized中的对象
  • 相关阅读:
    UVA
    UVALive
    找一
    买书最低价格
    NABCD模型分析
    二维数组--首尾
    结对开发---环
    结对开发---二维数组
    电梯设计需求调研报告
    数组求和(2)
  • 原文地址:https://www.cnblogs.com/itboys/p/6201942.html
Copyright © 2011-2022 走看看