观看吴文君老师学习视频的笔记,做个人学习用
Count-Down设计模式其实也叫做Latch(阀门)设计模式。当若干个线程并发执行完某个特定的任务,然后等到所有的子任务都执行结束之后再统一汇总。
public class CountDown {
private final int total ;
private int counter;
public CountDown(int total) {
this.total = total;
}
public void down(){
synchronized (this){
this.counter++;
this.notifyAll();
}
}
public void await(){
synchronized (this){
while (counter !=total){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.stream.IntStream;
public class CountDownClient {
private static final Random random = new Random(System.currentTimeMillis());
public static void main(String[] args) {
final CountDown latch = new CountDown(5);
System.out.println("准备多线程处理任务");
//The first phase;
IntStream.rangeClosed(1,5).forEach(i->{
new Thread(() ->{
System.out.println(Thread.currentThread().getName() + "is working");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.down();
},String.valueOf(i)).start();
});
latch.await();
//The second phase
System.out.println("多线程任务全部结束,准备第二阶段任务");
System.out.println("..............");
System.out.println("FINISH");
}
}
//会等第一阶段的多线程任务执行完,再执行第二阶段的打印任务。