1. 首页
  2. 编程语言
  3. Java
  4. 详解Java Slipped Conditions

详解Java Slipped Conditions

上传者: 2022-06-11 05:09:26上传 PDF文件 92.40 KB 热度 13次

所谓Slipped conditions,就是说, 从一个线程检查某一特定条件到该线程操作此条件期间,这个条件已经被其它线程改变,导致第一个线程在该条件上执行了错误的操作。现在两个线程都检查了这个条件为false,然后它们都会继续进入第二个同步块中并设置isLocked为true。为避免slipped conditions,条件的检查与设置必须是原子的,也就是说,在第一个线程检查和设置条件期间,不会有其它线程检查这个条件。为避免这个问题,我们必须将synchronized块移出synchronized块。细心的读者可能会注意到上面的公平锁实现仍然有可能丢失信号。如果调用lock()的线程在另一个线程调用queueObject.notify()之后调用queueObject.wait(),这个线程会一直阻塞到其它线程调用unlock方法为止,但这永远也不会发生。这些方法会在QueueObject内部对信号进行存储和响应。

下载地址
用户评论