java再复习-CountDownLatch的使用与实际应用(Android)
2017-03-11 11:32
411 查看
CountDownLatch相当于一个多线程的计数器,可以不用关注数的同步,来定义一个数值去等待做一些事情,看例子:
public class CountDownDemo2 {
/**
* 初始化一个CountDownLatch,次数为3
*/
public static CountDownLatch countDownLatch = new CountDownLatch(3);
public static void main(String[] args) throws Exception {
for(int i=0;i<3;i++){
new Thread(){
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + "..减一了");
//减一,每调用一次减一
countDownLatch.countDown();
};
}.start();
System.out.println("启动了一个线程...");
}
//一直阻塞,直到被减3次
countDownLatch.await();
System.out.println("it's over...");
}
}
实际应用经验:其实这个很有用的,当需要多个线程分别去干一堆事情的时候,然后这堆事情都干完之后给一个响应,这时这个类就很有帮助了,记得我刚去公司的时候,公司的app设计的不好,在首页进入的时候,同步数据的接口有7,8个呢,然后当时我记着上一个人代码是这样写的,定义一个变量,然后写一个同步方法来减这个变量,直到减完,然而框架中封装的每进行一次网络请求,就有一个加载框在转.....这样就导致一进入首页有7,8个加载框重叠的在转,所以我就想着在去加载之前,弹出dialog,然后等着这些接口都同步完,就让dialog消失,但是后来发现dialog总是不能像预期一起消失,我觉得一定是他那个同步减的方法有问题了,我也没有去纠结,就用了这个类来处理,非常好用,既然有了好东西为什么不用,何必去纠结以前的上锁问题。
public class CountDownDemo2 {
/**
* 初始化一个CountDownLatch,次数为3
*/
public static CountDownLatch countDownLatch = new CountDownLatch(3);
public static void main(String[] args) throws Exception {
for(int i=0;i<3;i++){
new Thread(){
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName() + "..减一了");
//减一,每调用一次减一
countDownLatch.countDown();
};
}.start();
System.out.println("启动了一个线程...");
}
//一直阻塞,直到被减3次
countDownLatch.await();
System.out.println("it's over...");
}
}
实际应用经验:其实这个很有用的,当需要多个线程分别去干一堆事情的时候,然后这堆事情都干完之后给一个响应,这时这个类就很有帮助了,记得我刚去公司的时候,公司的app设计的不好,在首页进入的时候,同步数据的接口有7,8个呢,然后当时我记着上一个人代码是这样写的,定义一个变量,然后写一个同步方法来减这个变量,直到减完,然而框架中封装的每进行一次网络请求,就有一个加载框在转.....这样就导致一进入首页有7,8个加载框重叠的在转,所以我就想着在去加载之前,弹出dialog,然后等着这些接口都同步完,就让dialog消失,但是后来发现dialog总是不能像预期一起消失,我觉得一定是他那个同步减的方法有问题了,我也没有去纠结,就用了这个类来处理,非常好用,既然有了好东西为什么不用,何必去纠结以前的上锁问题。
相关文章推荐
- Android 之Java基础---一个列表框引发的血案暨java装箱拆箱的实际应用
- Java基本数据类型、引用类对比及实际项目高级应用 使用==与equal的机制与不同
- Android视图切换库的使用之SwitchLayout的用法及实际应用案例
- 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- Android RxJava实际应用案例讲解:使用RxJava的最佳开发场景
- Android JNI 使用的数据结构JNINativeMethod详解 ||建立Android SDK下的JNI、JAVA应用完整步骤---Android JAVA调用C++代码
- [置顶] 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- Android笔记之分别使用Android、Java方式获取应用签名
- Android RxJava实际应用案例讲解:使用RxJava的最佳开发场景
- 8月28日 XE8移动开发入门(三)XE8在Android应用中调用Java类, 使用LiveBindings(免费培训)
- android基础笔记:数据库SQLite应用2(使用java方法)
- (7)java5线程并发库的应用(线程池) 以及在实际项目中的使用。。
- 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- JavaScript实际应用:innerHTMl和确认提示的使用
- Java中使用MySQL从安装、配置到实际程序测试详解
- Java规则引擎的工作原理及其实际应用
- 使用java开发facebook网站应用程序 , facebook,facebookrestclient,页面,fbml,应用程序,调用,用户,密钥,应用,登陆
- 使用Java语言快速开发Linux GUI的应用
- 如何使用XMLBeans兼容Java与XML应用开发
- java.net的使用,中间穿插了IO流的应用很使用的。