使用CountDownLatch时以下java程序的输出

使用CountDownLatch时以下java程序的输出,java,countdownlatch,Java,Countdownlatch,下面的java程序的输出是什么?它是否总是像下面提到的那样,或者当它可能不同时,会有什么特殊情况- 预期产出- 任务1关键部分已完成 任务2关键部分已完成 Java程序- import java.util.concurrent.CountDownLatch; public class CountDownLatchTest2 { public static void main(String[] args) { CountDownLatch countDownLatch = new C

下面的java程序的输出是什么?它是否总是像下面提到的那样,或者当它可能不同时,会有什么特殊情况-

预期产出-
任务1关键部分已完成
任务2关键部分已完成

Java程序-

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest2 {

public static void main(String[] args) {

    CountDownLatch countDownLatch = new CountDownLatch(1);

    RunnableTask1 task1 = new RunnableTask1(countDownLatch);
    RunnableTask2 task2 = new RunnableTask2(countDownLatch);

    Thread t2 = new Thread(task2);
    Thread t1 = new Thread(task1);

    t1.start();
    t2.start();
}

static class RunnableTask1 implements Runnable
{
    private CountDownLatch countDownLatch;

    public RunnableTask1(CountDownLatch countDownLatch) 
    {
        this.countDownLatch = countDownLatch;
    }

    @Override
    public void run()
    {
        System.out.println("task1 critical section completed");
        countDownLatch.countDown();
    }
}

static class RunnableTask2 implements Runnable
{
    private CountDownLatch countDownLatch;

    public RunnableTask2(CountDownLatch countDownLatch) 
    {
        this.countDownLatch = countDownLatch;
    }

    @Override
    public void run()
    {
        try
        {
            countDownLatch.await();
            System.out.println("task2 critical section completed");
        }
        catch (InterruptedException e) 
        {
            System.out.println("task 2 has been interupted");
        }           
    }
}
}

输出将始终是预期的输出。


System.out.println(“任务1关键部分完成”)发生在倒计时闩锁.countDown()之前发生在倒计时锁存器.await()之前取消阻止。

我觉得您的代码和预期输出不错。