java - Spring Scheduler同步方法饥饿

标签 java spring multithreading deadlock starvation

假设我有一个调度程序

@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时,就会导致饥饿。

谁能告诉我是否有办法避免这种情况?

最佳答案

这里没有死锁!

使用具有公平策略的 ReentrantLock。如果您不知道 ReentrantLock,请用 google 搜索。

private final ReentrantLock lock = new ReentrantLock(true);

关于java - Spring Scheduler同步方法饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40042840/

相关文章:

c# - 这种嵌套锁定会导致死锁吗?

java - 如何将 MapWritable 与 SequenceFile 一起使用? Hadoop

java - 如何对 JavaFX 应用程序启动进行单元测试

java - 尝试获取jax-rs服务的WADL时报错500

java - 在 Java 中使用旧文件详细信息创建文件

spring - Thymeleaf 注册页面 - 执行处理器 'org.thymeleaf.spring4.processor.attr.SpringInputGeneralFieldAttrProcessor' 期间出错

java - 通过类实现接口(interface)创建基于 CGLib 的代理

spring - FieldPath 字段名不能包含 '.'

python - 阻塞执行直到条件满足

java - java中多线程是如何工作的