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中的对象
上一篇:Redis Cluster高可用集群在线迁移操作记录


下一篇:Dockerfile介绍、Docker制作jdk镜像