天天看點

java循環屏障,循環屏障Java,如何驗證?

我正在準備采訪,隻是想準備一些基本的線程示例和結構,以便我可以在白闆編碼期間使用它們,如果必須的話.

我正在閱讀有關CyclicBarrier的文章,并且隻是在嘗試它,是以我寫了一個非常簡單的代碼:

import java.util.concurrent.CyclicBarrier;

public class Threads

{

public static void main(String[] args)

{

// ******************************************************************

// Using CyclicBarrier to make all threads wait at a point until all

// threads reach there

// ******************************************************************

barrier = new CyclicBarrier(N);

for (int i = 0; i < N; ++i)

{

new Thread(new CyclicBarrierWorker()).start();

}

// ******************************************************************

}

static class CyclicBarrierWorker implements Runnable

{

public void run()

{

try

{

long id = Thread.currentThread().getId();

System.out.println("I am thread " + id + " and I am waiting for my friends to arrive");

// Do Something in the Thread

Thread.sleep(1000*(int)(4*Math.random()*10));

// Now Wait till all the thread reaches this point

barrier.await();

}

catch (Exception e)

{

e.printStackTrace();

}

//Now do whatever else after all threads are released

long id1 = Thread.currentThread().getId();

System.out.println("Thread:"+id1+" We all got released ..hurray!!");

System.out.println("We all got released ..hurray!!");

}

}

final static int N = 4;

static CyclicBarrier barrier = null;

}

您可以按原樣複制粘貼并在編譯器中運作.

我想驗證的是,确實所有線程在代碼中等待此時:

barrier.await();

我放了一些等待,并希望我會在控制台上以順序的方式一個接一個地看到4個語句,然後是“release.hurray”語句的’outburst’.但無論我選擇什麼樣的睡眠,我都會看到所有聲明的爆發.

我在這裡錯過了什麼嗎?

謝謝

P.S:有沒有像http://codepad.org/F01xIhLl這樣的線上編輯器,我隻需要放入Java代碼并點選按鈕即可運作丢棄的代碼? .我發現一些需要一些配置才能運作任何代碼.