2017-06-07 7 views
1

私は、非同期的にいくつかの操作を行うことをサポートするAPIを持っていて、強制的にスレッドをブロックしたいと思います。現在のスレッドをブロックする非同期操作を強制します

static void doWorkSync(Worker worker) { 
    final Condition condition = new ReentrantLock().newCondition(); 
    worker.doWorkAsync(() -> condition.signal()); 
    try { 
    condition.await(); 
    } catch (InterruptedException e) { 
    throw new AssertionError(e); 
    } 
} 

上記のように、このケースで最も厳しい解決法はありますか?

+0

'doWorkAsync' APIはどのように見えますか? 'Runnable'コールバックパラメータのようなもので' void'ですか? –

+0

また、対応する 'Lock'を所有することなく' signal'または 'await'することはできません。 –

+0

@SotiriosDelimanolisはい: 'void doWorkAsync(実行可能なアクション)' –

答えて

0

CountDownLatchお探しのものが見つかりました!

static void doWorkSync(Worker worker) { 
    final CountDownLatch latch = new CountDownLatch(1); 
    worker.doWorkAsync(() -> latch.countDown()); 
    try { 
    latch.await(); 
    } catch (InterruptedException e) { 
    throw new AssertionError(e); 
    } 
} 
関連する問題