我的应用程序中有一个 ReentrantReadWriteLock。在 timertask 的 run 方法中,我写了 lock 然后调用了一个函数。之后我解锁:
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
lock.writeLock().lock();
function();
lock.writeLock().unlock();
}
}, 0, 1000); // prints 1 every 1second
我担心的是如果这个计时器被取消并且锁无法解锁会发生什么。有没有办法使调用 .cancel 仅在当前迭代完成后才停止计时器。
或者是否有另一种数据结构可以让我在单独的线程上以一定的速率运行任务/函数并能够停止它以便释放所有锁?