package com.current;
public class Counter {
public void totalCount(){
System.out.println("全国人口统计执行");
}
public void cityCount(String city){
System.out.println(city + "-》完成人口统计");
}
}
<pre name="code" class="java">package com.current;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CityThread implements Runnable{
private Counter counter;
private String city;
private CyclicBarrier barrier;
public CityThread(Counter counter, String city, CyclicBarrier barrier) {
super();
this.counter = counter;
this.city = city;
this.barrier = barrier;
}
@Override
public void run() {
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
counter.cityCount(city);
try {
//阻塞等待其他线程
barrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
<pre name="code" class="java">package com.current;
public class TotalThread implements Runnable{
private Counter counter;
public TotalThread(Counter counter) {
super();
this.counter = counter;
}
@Override
public void run() {
// TODO Auto-generated method stub
counter.totalCount();
}
}
<pre name="code" class="java">package com.current;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierDemo {
public static void main(String[] args) {
Counter counter = new Counter();
//利用屏障管理线程,传入管理者线程
CyclicBarrier barrier = new CyclicBarrier(4, new TotalThread(counter));
new Thread(new CityThread(counter,"四川",barrier)).start();
new Thread(new CityThread(counter,"重庆",barrier)).start();
new Thread(new CityThread(counter,"云南",barrier)).start();
new Thread(new CityThread(counter,"深圳",barrier)).start();
}
}