0
我有得到一個可運行於以下參考文獻中描述的方式運行的問題:彈簧狀態機的任務執行不點火
TasksHandler handler = TasksHandler.builder()
.task("1", sleepRunnable())
.task("2", sleepRunnable())
.task("3", sleepRunnable())
.build();
handler.runTasks();
我的實現看起來是這樣的:
private Action<States, Events> getUnlockedAction() {
return new Action() {
@Override
public void execute(StateContext sc) {
System.out.println("in action..");
handler = new TasksHandler.Builder().taskExecutor(taskExecutor()).task("1", dp.runProcess(1)).build();
handler.addTasksListener(new MyTasksListener());
handler.runTasks();
System.out.println("after action..");
}
};
}
TaskExecutor的初始化如下所示:
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor te = new ThreadPoolTaskExecutor();
te.setMaxPoolSize(50);
te.setThreadNamePrefix("LULExecutor-");
te.setCorePoolSize(25);
te.initialize();
return te;
}
我對DP(數據處理器)的代碼如下所示:
@Component
@Qualifier("dataProcessor")
public class ADataProcessor {
public Runnable runProcess(final int i) {
return new Runnable() {
@Async
@Override
public void run() {
long delay = (long) ((Math.random() * 10) + 1) * 1000;
System.out.println("In thread " + i + "... sleep for " + delay);
try {
Thread.sleep(delay);
} catch (InterruptedException ex) {
Logger.getLogger(FSMFactoryConfig.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("After thread " + i + "...");
}
};
}
}
當我執行我的代碼,我看到消息「在行動..」和「行動後..」無延遲..
當我使用以下命令:
taskExecutor().execute(dp.runProcess(1));
taskExecutor().execute(dp.runProcess(2));
taskExecutor().execute(dp.runProcess(3));
taskExecutor().execute(dp.runProcess(4));
taskExecutor().execute(dp.runProcess(5));
taskExecutor().execute(dp.runProcess(6));
我得到了我會從使用TasksHandler期待..
- 狀態改變到UNLOCKED
- 在螺紋2 ...睡眠10000
- 在螺紋3 ...睡眠5000
- 在螺紋4 ...睡眠8000
- 在螺紋5。 ..睡了4000
- 在用線6 ...睡了4000
- 在線程1 ...睡了9000
- 2016年1月13日下午12點32分13秒 - org.springframework.scheduling.concurrent .ThreadPoolTaskExecutor初始化爲
- INFO:初始化的ExecutorService
- 狀態改變到LOCKED
- 螺紋5之後...
- 螺紋6之後...
- 線程3之後...
- 螺紋4 ...後
- 線程1之後...
- 線程2之後...
ñ在使用TasksHandler時會顯示睡眠延遲之前或之後的其中一條消息。所以我的問題,我怎樣才能真正執行我的runnable?如果我做得正確,我應該檢查什麼?
啊,我會看看..非常感謝! –