0

多数のスレッドで ThreadPoolExecutor を実行しています。スレッド内のデータを操作したいので、オブジェクトをスレッドに送信し、終了後にデータを使用したいと考えています。私が知っている唯一の方法は、スレッドが join() で終了するまで待ってからデータを使用することです。問題は、ThreadPoolExecutor から単一のスレッドを取得できないことです。私はこのようなことをしたいと思います:

Thread t = ThreadPoolExecutor.getThread();
t.start();
t.join();

残りのコード....

誰も方法を持っていますか?Callable を使用できることはわかっていますが、既存のコードがあるため、これを避けたいです...

4

1 に答える 1

4

submitはい、できFutureますget()Future

Future<SomeResult> future = executorService.submit(new Callable<SomeResult>(){
    public SomeResult call(){
        //do work
        return new SomeResult();
    }
});

future.get();//suspends the current thread until the SomeResult callable returns.

基本的に、call()呼び出しはプール内のいずれかのスレッドで実行され、が現在のスレッドを中断get()するのと同様に、現在のスレッドをt.join()中断します。

于 2013-02-07T14:24:09.533 に答える