Callable
別のスレッドで実行されたときに a が値を返す方法を理解しようとしています。
クラスExecutors
、AbstractExecutorService
、ThreadPoolExecutor
およびを探しています。FutureTask
すべてjava.util.concurrent
パッケージで利用できます。
Executor でメソッドを呼び出して ExecutorService オブジェクトを作成します (例: newSingleThreadExecutor()
)。次に、 Callable オブジェクトを で渡すことができます ExecutorService.submit(Callable c)
。
call()
メソッドは によって提供されるスレッドによって実行されるため、ExecutorService
返されたオブジェクトはどこで呼び出し元のスレッドに「ジャンプ」しますか?
次の簡単な例を見てください。
1 ExecutorService executor = Executors.newSingleThreadExecutor();
2 public static void main(String[] args) {
3 Integer i = executor.submit(new Callable<Integer>(){
4 public Integer call() throws Exception {
5 return 10;
6 }
7 }).get();
8 System.out.print("Returns: " + i + " Thread: " + Thread.currentThread.getName());
9 // prints "10 main"
10 }
System.out
別のスレッドで実行される call メソッドの整数を Integer オブジェクト (行 3) に返して、メイン スレッド (行 7) のステートメントで出力できるようにするにはどうすればよいでしょうか?
ExecutorService
がそのスレッドを実行する前にメイン スレッドを実行して、 System.out statement
null を出力することはできませんか?