我不知道我在做什么错。 Countdownlatch.await不起作用。绝对没有等待时间。我用荒谬的数字(50秒)进行了测试,并且通话后言立即出现。我正在尝试在UI线程上使用它。我也有另一个线程正在运行。

代码:

private final CountDownLatch latch = new CountDownLatch(1); //called earlier

void someMethod() {
  //code
   Runnable flashScreen = new Runnable() {
        @Override
        public void run() {
            flashScreen();
        }
    };

    runOnUiThread(flashScreen);
    //Mode code
}

private void flashScreen()
{
    final TextView monthDayYear = (TextView)findViewById(R.id.month_day_year);
    final TextView hourMinuteSecond = (TextView)findViewById(R.id.hour_minute_second);
    //Get date and time
    final SyncModule syncModule = _application.getSyncModule();
    syncModule.start();

    while(counter.intValue() < 150) {
        try {
            //Thread.sleep(10);
            latch.countDown();
            latch.await(10, TimeUnit.MILLISECONDS);
            counter.incrementAndGet();
        } catch (InterruptedException ex) {
            Util.appendLog("SyncActivity: InterruptedException while flashing camera " + ex.getMessage());
        }
    }

    final ImageView fadeView = (ImageView)findViewById(R.id.sync_flash_rectangle);
    fadeView.setBackgroundColor(Color.WHITE);
    fadeIn(fadeView, 1, 0, 1000, true);

    Calendar syncTime = syncModule.getDateAndTime();

    monthDayYear.setText(new SimpleDateFormat("MM/dd/yyyy").format(syncTime.getTime()));
    hourMinuteSecond.setText(new SimpleDateFormat("HH:mm:ss:00").format(syncTime.getTime()));

    try {
        latch.countDown();
        latch.await(50, TimeUnit.SECONDS);
    } catch (InterruptedException ex) {
        Util.appendLog("SyncActivity: InterruptedException while flashing camera " + ex.getMessage());
    }

    counter.set(1000);

}

最佳答案

我不确定您是否了解CountDownLatch的工作原理。通常在单独的线程中调用countDown()方法和await()方法。

从Java8 JavaDoc中获取 CountDownLatch :



在当前代码中,您的闩锁的倒计时为1(从示例new CountDownLatch(1);的第一行开始)。在您正在调用await()的两个位置中,都紧接在您调用countDown()之前,这导致锁存器的倒计时达到0(甚至更少)。因此,对await()的任何调用甚至都不会阻止,因为已经达到了倒计时。

目前尚不清楚您要完成的工作,但是如果您提供更多详细信息,我可能会提供进一步的建议。

10-08 07:08