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中的对象
  • 相关阅读:
    git
    *** errRun
    Centos与Debian的安装命令
    HTML基础
    基本的SQL语言
    phpstudy靶场搭建
    Centos7下搭建服务器(apache+mysql+php)
    Centos7设置yum源
    Linux基础
    一个服务器中搭建多个站点
  • 原文地址:https://www.cnblogs.com/itboys/p/6201942.html
Copyright © 2011-2022 走看看