假设我有一个调度程序
@Component
public class Scheduler{
private static int counter = 0;
private synchronized void countIt(){
counter++;
}
@Scheduled(fixedDelay = 3000)
public void job1(){
countIt();
}
@Scheduled(fixedDelay = 6000)
public void job2(){
countIt();
}
}不同情况下的不同任务触发器将调用countIt。
当两个或多个作业同时调用countIt时,将导致饥饿。
有谁能告诉我是否有办法避免这种情况?
发布于 2016-10-14 13:50:29
这里没有僵局!
使用ReetrantLock和公平政策。,如果你不知道ReentrantLock,请搜索它。
private final ReentrantLock lock = new ReentrantLock(true);发布于 2016-10-14 12:27:21
这不应陷入僵局。
死锁是由一个线程锁定资源A,然后试图锁定资源B,而另一个线程锁定资源B,然后尝试锁定资源A造成的。有更复杂的方式可以发生死锁,但是死锁不能只发生在一个锁上。
在您的情况下,只有一个锁,所以没有死锁。
https://stackoverflow.com/questions/40042840
复制相似问题