& & 首先,我们先来了解下闭锁的知识。闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态。闭锁的作用就相当于一扇门,在闭锁到达结束状态之前,这门一直是关闭的,并且没有任何线程可以通过,当到达结束状态时,这门打开并允许所有的线程通过,当闭锁到达结束状态之后,将不会改变闭锁的状态,一直保持着打开的状态,闭锁可以确保某些活动指导其他活动都完成后才继续执行。下面看一个具体的实现。
package com.nine.
import java.util.concurrent.CountDownL
public class CountDownLatchDemo {
public long timeTasks(int nThreads,final Runnable task) {
final CountDownLatch startGate = new CountDownLatch(1) ;
final CountDownLatch enddGate = new CountDownLatch(nThreads);
for(int i = 0;i&nTi++){
Thread t = new Thread(){
public void run() {
startGate.await();
task.run();
enddGate.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
t.start();
long start = System.nanoTime();
startGate.countDown();
enddGate.await();
} catch (InterruptedException e) {
e.printStackTrace();
long end = System.nanoTime();
return end-
这个demo中,使用了闭锁,而不是在线程创建后就立即启动,启动门,startGate使得主线程能够同时释放所有的工作线程,而结束门,可以使主线程能够能带最后一个线程执行完成,而不是顺序的等待每个线程执行完成。
下面来介绍下闭锁的具体实现:
所含方法:&await(),await(long, TimeUnit),countDown,getCount
内部静态类Sync extends AbstractQueuedSynchronizer
1、两个公开方法,await和countDown,不存在获取资源的操作,在初始化的时候已经设置state。tryAcquireShared只是做检查操作,如果等于0,就返回1
countDown做releaseShared操作,它的实现是基于AQS的实现机制。下次重点解读下AQS的原理
阅读(...) 评论()Parting Glass / The Brown Gate / The Yellow Bonnet-Countdown, Parting Glass / The Brown Gate / The Yellow BonnetMP3下载,歌词下载 - 虾米音乐
Loading...
Parting Glass / The Brown Gate / The Yellow Bonnet
@微博好友,送歌给Ta!
Sorry,此歌曲暂无文本歌词。
使用手机扫码收听单曲
打开虾米音乐APP
点击 扫一扫
扫描二维码
听Parting Glass / Th的人也听
关注虾米: