countDownLatch Future 实践学习以及parallelStream方式实现并发

嘚不嘚:自从到了新公司好久都没有时间写博客了,最近在忙什么呢,忙着学习业务、技术、服务器环境等。不过公司用的技术还挺棒的,起码在这之前我没有接触过,之前只是听说过,但是没有用过。主要用到的技术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();
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值