我想实现迭代深化(增量树构建)。这是我将询问的代码的一部分:
ExecutorService executorService = Executors.newSingleThreadExecutor();
Set<Callable<Integer>> callables = new HashSet<Callable<Integer>>();
callables.add(new Callable<Integer>() {
public Integer call() throws Exception {
iterativeDeepening(depthLimit, board);
return -1;
}
});
callables.add(new Callable<Integer>() {
public Integer call() throws Exception {
Thread.sleep(500);
return 1;
}
});
try{
executorService.invokeAny(callables, 1000, TimeUnit.MILLISECONDS);
}catch(TimeoutException | InterruptedException ex){
executorService.shutdown();
}
executorService.shutdown();
从我读到的关于带有时间限制的 invokeAny() 的内容中,它应该在达到最后期限后立即结束执行其 Callable 对象。当我长时间睡眠而不是我的函数 iterativeDeepening(depthLimit, board) 时,它会起作用。如何使它与我的功能一起使用?下面我将代码粘贴到这个函数中:
public void iterativeDeepening(byte depthLimit, byte[] board){
for(byte depth=1;depth<depthLimit;depth++){
GameTree gameTree= new GameTree();
byte[] tempBoard = new byte[14];
for(byte i=0;i<14;i++){
tempBoard[i] = board[i];
}
Node <byte[]> root= new Node<byte[]>(tempBoard, player);
try {
gameTree.buildGameTree(depth, root);
} catch (OutOfMemoryError E) {
gameTree.eraseGameTree(depth,root);
System.gc();
}
MiniMax minimax = new MiniMax(player);
move= minimax.selectMove(depth, root);
}
}
如果您知道更好的方法或知道如何成功停止执行我的功能,请告诉我。我还尝试了本主题中提到的可运行接口: How to stop execution after a certain time in Java? 但它只是工作相同。