java - 我们如何在对象中创建 `notify()` 方法?

标签 java multithreading wait notify

<分区>

我在面试中被问到这个问题。

How you can create your own notify() method ?

我告诉过这是一个原生方法,不能被覆盖。

但她对这个答案并不满意。

谁能解释一下?

最佳答案

我猜面试官想要一个等同于等待/通知机制的 java 实现,而不直接使用 Object.wait() 和 Object.notify()。

例如,可以使用以下任何高级同步机制来模拟等待/通知:

  • BlockingQueue 实现
  • 同步队列
  • 倒计时锁
  • 循环屏障
  • future

但是请注意,语义可能与等待/通知略有不同。与标准的等待/通知不同,例如使用阻塞队列,您的优势在于即使在收到通知时它没有等待,服务员线程也会捕获“通知”。

以下是使用 SynchronousQueue 的一个非常简单的实现:

public class WaitNotify {
  private final Object ITEM = new Object(); 
  private final SynchronousQueue<Object> q = new SynchronousQueue<Object>();

  public void myNotify() {
    q.offer(ITEM);
  }

  public void myWait() throws InterruptedException {
    q.take();    
  }
}

关于java - 我们如何在对象中创建 `notify()` 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476008/

相关文章:

c++ - 创建任务(): The application called an interface that was marshalled for a different thread

wpf - 计算应等待调度程序

java - setVisible 的问题 (true)

java - libGDX 奇怪的 FPS 下降和调试

java - 如何实现关键监听?

java - 克服 equals() : Stream<String> seems to be unrelated to String 不太可能的参数类型的优雅方法

java - 多线程中的cookie覆盖

java - 如何模拟ad hoc网络节点?

c# - 如何在动画播放时延迟统一运动

java - 为什么必须 wait() 始终处于同步块(synchronized block)中