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中的对象
  • 相关阅读:
    JS 寻路算法
    Fireworks基本使用
    html基础知识汇总(二)之Emmet语法
    JS函数式编程
    Web前端导航
    CSS样式一
    选择器的分类
    框架集
    表单标签元素
    图像热点&图像映射
  • 原文地址:https://www.cnblogs.com/itboys/p/6201942.html
Copyright © 2011-2022 走看看