前言
苏宁估计是今年最大的黑马了,我们在开始中没有期望能战胜G2小组第一出线,在八进四中我们也没有没想到苏宁能够打赢京东,结果苏宁3:1战胜京东,我们认为苏宁今年的世界赛的成绩已经很好了,或许也就止步于此了,毕竟他作为LPL三号种子,接下来要面对的是一号种子Tes,而且Tes刚经历了一场让二追三的血腥厮杀,状态火热。苏宁用实力告诉你,不,我要追求更高的目标,他们战胜了Tes,成为了LPL唯一的希望。
现在我们唯一的期待,10月31号,我们能听到一句恭喜苏宁,恭喜LPL!
这波,感谢一波大校,没问题吧!周六大校支持一波大乌龟没问题吧
感谢你,苏小落
回归主题,今天给大家分享个简单的知识点,JDK并发包里面自带的一些工具类,功能很强大实用
CountDownLatch
CountDownLatch就像一个门,门上有N把锁,只有当锁同时都打开,我们才能开门。这里这个门是一次性的,用完之后不能重新再给这个门上锁,为什么我要强调一次性呢?因为下面还有不是一次性的CyclicBarrier
CountDownLatch,使一个线程等待其他线程都达到相应的状态再执行,完成工作的主要方法就是await()、countDown()
内部是通过一个计数器实现的,计数器的初始值就是要等待线程的数量,每当一个线程执行完毕调用countDown()之后计数器数值减一,计数器数值变为0的时候,表示所有线程执行完毕,调用await()方法等待的线程便会恢复工作
来看一个例子:
public class TestCountDownLatch {
public static void main(String[] args) {
// 传入参数2,代表需要等待两个线程
final CountDownLatch latch = new CountDownLatch(2);
//线程等待一秒
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("一号准备完毕,用时1秒!");
latch.countDown();
}
}).start();
//线程等待三秒
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("二号准备完毕,用时2秒!");
latch.countDown();
}
}).start();
try {
System.out.println("两位选手请准备!");
//主线程调用await,等待两个线程到达(即调用countDown)
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 两个线程执行完毕后,主线程恢复运行
System