我正在尝试运行poll,poll1,poll2方法独立运行,现在如果poll()正在运行且处理时间超过10秒,其他方法正在等待poll()完成其处理。我在poll()sys out中保留了一个断点,而其他方法sys out没有执行。怎么解决这个?下面是代码库。
我还尝试添加
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.READ)
但发现行为没有变化。
@Singleton
public class SchedulerA {
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void poll() {
System.out.println("SchedulerA:: poll()");
}
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void poll1() {
System.out.println("SchedulerA:: poll()1");
}
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void poll2() {
System.out.println("SchedulerA:: poll()2");
}
}
我期待如果poll()正在运行(放置一个断点/或添加一个超过10秒的for循环)输出show SchedulerA :: poll()1 SchedulerA :: poll()2再次10秒后SchedulerA :: poll()1 SchedulerA :: poll()2
也许一些解决方法是使用ManagedScheduledExecutorService。通过这样注入使用它:
@Resource
private ManagedScheduledExecutorService scheduledExecutorService;
并在@PostConstruct中安排上述任务以固定延迟执行,例如
scheduledExecutorService.scheduleWithFixedDelay(this::poll, 1, 10, TimeUnit.SECONDS);
等等