0

私はこのようなことをしたい:

public class MyCallable implements Callable<Boolean>, MyObserver
{
    Boolean mSuccess = false;

    @Override
    public Boolean call() throws Exception
    {
        // ... Wait here until myCallback is called ...

        return mSuccess;
    }

    @Override
    public void myCallback()
    {
        if(something) mSuccess = true;
    }
}

だから私はそれを次のように使うことができます:

MyCallable callable = new MyCallable();

FutureTask<Boolean> futureTask = new FutureTask<Boolean>(callable);

ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(futureTask);

Boolean successfull = futureTask.get();

この「コールバックが呼び出されるのを待つ」コードはどのようになりますか? 「Boolean mCallbackCalled = false」と呼ばれるメンバーを作成し、while(!mCallbackCalled) だけにすることもできると思いますが、それはかなりハックなようです...

4

1 に答える 1

1

エグゼキュータをまったく使用しないでください。

代わりにCountDownLatch、カウント 1 で を作成し、countDown()それをコールバックで作成しawait()てから、呼び出しコードで作成します。

于 2013-10-21T19:46:29.260 に答える