Java:基于时间的线程锁定

Cur*_*rge 0 java multithreading

我正在寻找一种方法在java中,通过它我们可以实现基于时间的java线程锁定或者可能是基于时间的中断.考虑一下.

一个java线程调用以下函数,

private DATA getData() {
   DATA data;
   synchronized(dataLock) {
       data = fetchData()
   }
   return data
}
Run Code Online (Sandbox Code Playgroud)

现在假设对fetchData()的调用挂起,不返回.有没有办法在这个锁(dataLock)上超时,或者中断这个线程?

Kay*_*man 5

使用更灵活的锁定界面(例如ReentrantLock),允许您拨打电话tryLock(long time, TimeUnit unit)以防止永远等待.

  • 这取决于`fetchData()`方法本身.你当然可以打断线程并希望它足以阻止它做它正在做的事情.你可以继承一个锁实现,以提供对当前持有锁的`Thread`的访问(它是`ReentrantLock`中的受保护方法). (4认同)
  • 感谢@Kayaman的评论,但要求不同.它不是关于计时其他线程,而是超时这个线程. (2认同)