私はJavaでFuturesとScheduledExecutorServiceを調べ始めたところですが、なぜCallableが指定したスケジュールで実行されないのか疑問に思っています。このサンプルコードでは、呼び出し可能オブジェクトは1回実行されますが、アプリが完了したり、タスクが再度実行されたりすることはありません。これは、私が予想していたことです(問題は私の予想にあると確信しています)。
Runnablesは正常に機能します。Callablesは永久にブロックされているように見えますが、理由はわかりません。
ありがとう!
public class ExecutorExample {
/**
* @param args
* @throws ExecutionException
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);
FutureTask<ArrayList<String>> ft1 = new FutureTask<ArrayList<String>>(new Callable<ArrayList<String>>(){
@Override
public ArrayList<String> call() {
ArrayList<String> stuff = new ArrayList<String>();
for(int i = 0;i<10;i++){
String thing ="Adding " + i + " to result";
stuff.add(thing);
System.out.println(thing);
}
return stuff;
}});
scheduler.scheduleAtFixedRate(ft1, 0, 1, TimeUnit.SECONDS);
System.out.println(ft1.get());
System.out.println(ft1.isDone());
}
}