私はExecutorService
を使用していますが、しばらくメインプログラムをブロックしていますが、メインプログラムをブロックしたくありません。スレッドの実行が完了するまでとしない限り、現在それがStart 4
を印刷しません実行プログラム - メインプログラムをブロックしない
Start 1
Start 3
Start 2
Start 5
Start 4
finally
:
public class Test {
public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
ExecutorService executor = null;
try {
executor = Executors.newFixedThreadPool(1);
System.out.println("Start 1");
Runnable task = new Runnable() {
public void run() {
System.out.println("Start 2");
try {
Thread.sleep(7000);
System.out.println("Start 5");
} catch (Exception e) {
}
}
};
System.out.println("Start 3");
// executor.execute(task);
Future future = executor.submit(task);
Object result = future.get(9, TimeUnit.SECONDS);
System.out.println("Start 4");
} catch (Exception e) {
} finally {
System.out.println("finally");
executor.shutdownNow();
}
}
}
出力:ここ
はコードです。私が探しているのは、タイムアウトがあり、スレッドがバックグラウンドで実行され、メインスレッドをブロックしないメカニズムです。
結果が必要ですか?結果が必要な場合、メインスレッドはどのように続行しますか? – matt