0
からの停止方法・実行を強制的にどのように私は方法があります。 呼び出し可能<Object>呼び出し方法
は、私が試した:public class Test {
public static void main(String[] args) throws MyException {
runWithTimeout(new Datasource());
}
public static void runWithTimeout(final Datasource ds) throws MyException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Object> task = new Callable<Object>() {
public Object call() throws MyException {
ds.create();
return null;
}
};
Future<Object> future = executor.submit(task);
try {
future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException tex) {
throw new MyException("TimeoutException. Caused By", tex);
} catch (InterruptedException iex) {
throw new MyException("InterruptedException. Caused By", iex);
} catch (ExecutionException eex) {
throw new MyException("InterruptedException. Caused By", eex);
} finally {
future.cancel(true);
executor.shutdown();
}
}
}
しかし、作成方法がまだ実行されています。どうすれば強制停止できますか?
create()
メソッドを変更することはできません。だからcreate()
メソッドの現在のスレッドにisInterrupted()
を追加できません。
簡単に言えば、何もできません。割り込みに応答しないコードは不正なコードです。あなたはそれを強制的に停止することはできません。 – VGR