java.util.concurrent.CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Recipes_CyclicBarrier {
public static CyclicBarrier barrier = new CyclicBarrier(3);
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(new Thread(new Runner("runner 1")));
executor.submit(new Thread(new Runner("runner 2")));
executor.submit(new Thread(new Runner("runner 3")));
executor.shutdown();
}
}
class Runner implements Runnable{
private String name;
public Runner(String name){
this.name = name;
}
public void run() {
System.out.println(name+" ready");
try{
Recipes_CyclicBarrier.barrier.await();
}catch(Exception e){
}
System.out.println(name+"run ");
}
}
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.barriers.DistributedBarrier;
import org.apache.curator.retry.ExponentialBackoffRetry;
public class Recipes_Barrier {
static String path = "/curator_recipes_barrier_path";
static DistributedBarrier barrier;
public static void main(String[] args) throws Exception {
for(int i=0;i<5;i++){
new Thread(new Runnable() {
public void run() {
try {
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString("172.18.1.34:2181")
.sessionTimeoutMs(5000)
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.build();
client.start();
barrier = new DistributedBarrier(client, path);
System.out.println(Thread.currentThread().getName()+" 号barrier设置");
barrier.setBarrier();
barrier.waitOnBarrier();
System.out.println(Thread.currentThread().getName()+"启动");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
Thread.sleep(2000);
barrier.removeBarrier();
}
}