java并发操作

2019-05-17 00:02:09来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

项目中常用的java并发操作

一、java8新特性java并发流操作(结合纳姆达表达式)

       List<String> list = new ArrayList<>();

        list..stream().parallel().forEach(list1 ->{

  // 调用方法 method

});

      注:其中list1为list一个子集。然后通过java流(steam)操作并发(parellel),同时开启多个线程去执行方法(method);

所以当一个线程执行完成之后会继续执行集合中另外的子集,直到list循环结束。

 

二、采用阻塞队列的形式

  1、List<Qcbatch> qcBatchList = new ArrayList<>();

  注:QcBatch  为一个对象,此处为一个示例,然后在qcBatchList 集合中放入自己的元素

  2、// 创建阻塞队列跑批

  ConcurrentLinkedQueue<QcBatch> queue = new ConcurrentLinkedQueue<>(); // 线程同步的队列
  queue.addAll(qcBatchList );
  int count = 10; // 此处为设置线程数位10
  final CountDownLatch countDownLatch = new CountDownLatch(count); //将线程放入计数器中
  注:CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下,CountDownLatch能够使一个或多个线程等待其他线程完成 各自的工作后再执行
  3.循环操作线程
  for (int i = 0; i < count; i++) {
    new Thread(() -> {
    CheckResult<QcBatch> t;
    try {
    // queue.poll 从队列中删除第一个元素,知道为空,会返回null对象(与remove()有些不同)
    while ((t = queue.poll()) != null) {
    // 此处调用自己的业务逻辑
    }
    } finally {
    countDownLatch.countDown(); // 每调用一次这个方法,在构造函数中初始化的count值就减1
      //所以当N个线程都调 用了这个方法,count的值等于0,然后主线程就能通过await()方法,恢复执行自己的任务。
    }
  }).start();
  }
  countDownLatch.await(); // 等待所有跑批线程执行结束

 两种方式比较:第一种方式是每个线程各自执行,任务会有先后顺序;

       第二种方式是等时执行,在效果上是同一时间完成10个任务;

       所以我们在实际项目中要根据不同的情况来选择哪种方式


原文链接:https://www.cnblogs.com/dfys/p/10874377.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java反射-使用反射获取类的所有信息

下一篇:java基础第一篇