嘚不嘚:自从到了新公司好久都没有时间写博客了,最近在忙什么呢,忙着学习业务、技术、服务器环境等。不过公司用的技术还挺棒的,起码在这之前我没有接触过,之前只是听说过,但是没有用过。主要用到的技术dubbo、es、zoopker。大概了解了这些技术是干嘛的,还没有深入了解呢,dubbo我自己搭了一个简单的用了用,到底哪里好,等研究研究再说,es和zookeeper的应用都没有怎么看。现在在学一些其他的应用技术guava、lambda、redis。redis之前在spring的框架中使用过,其他的也没有什么了解,最近我也在看看redis相关的东西。接触的多了发现了以前的技术有多low,个人觉得还是去一些技术比较好的平台,第一是技术底蕴,第二是技术氛围也比较好。countDownLatch Future则两个类我以前自己看过,但是从来没有理解过,也不知道这东西到底在什么时候使用,这次见到实例了,自己用了用,感觉好像会用了。如有问题希望大神多多指教。
概述
countDownLatch 和 Future是java.util.concurrent包下面的类,为并发所用。
- countDownLatch:利用它可以实现类似计数器的功能。(一个方法内如果现在存在1、2、3、4四个线程正在处理任务,countDownLatch的值是4,四个线程的执行时间分别是10毫秒依次递增,用countDownLatch时,会在四个线程都执行完之后返回结果,如果没有用countDownLatch,有可能指完成了部分的线程就返回结果了)
- Future:对于具体的Callable或者Runnable的任务执行结果进行取消、查询是否完成和获取结果。(对于线程可以通过Future对当前线程进行)
-业务场景:调用其他的接口返回了结果,结果被封装到Version中,需要将Version中的结果转化为List。
代码
@Data
public class Version<T> {
private T data;
private String code;
private String message;
}
@Data
public class User {
private String name;
private int age;
private String grade;
}
//线程类
public class Task implements Callable<User>{
private Version<User> version;
private CountDownLatch latch;
public Task(Version<User> version, CountDownLatch latch) {
this.version = version;
this.latch = latch;
}
@Override
public User call() throws Exception {
User u;
try {
u = version.getData();
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
latch.countDown();
}