利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。
import java.util.concurrent.CyclicBarrier;
/**
* @author zxc
* 启动threadSize个线程后同时并行执行程序
*/
public class CycSleepTest
{
public static void main(String[] args)
throws Exception
{
int threadSize = 200;
CyclicBarrier cyclicBarrier = new CyclicBarrier(threadSize);
System.out.println(threadSize + "线程全部到达屏障点才能继续");
for (int i = 1; i <= threadSize; i++)
{
CycJob job = new CycJob(cyclicBarrier, String.valueOf(i));
final Thread thread = new Thread(job);
thread.setDaemon(true);
thread.start();
Thread.sleep(1);
}
System.out.println(threadSize + "个线程全部启动");
Thread.sleep(40000);
}
}
/**
* Runnable 线程类
*/
class CycJob implements Runnable
{
private CyclicBarrier cyclicBarrier;
private String name;
static final int millis = 5;
public CycJob(CyclicBarrier cyclicBarrier, String name)
{
this.name = name;
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run()
{
System.out.println(name + "启动并就位,到达屏障点");
try
{
//等待cyclicBarrier被打破
cyclicBarrier.await();
// Thread.sleep(1000);
System.out.println(name + "跑");
// 持续sleep30秒需要多少次循环
final int count = 30000 / millis;
for (int i = 0; i < count; i++)
{
Thread.sleep(millis);
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println(name + ":到达终点");
}
}