java并发操作
2019-05-17 00:02:09来源:博客园 阅读 ()
项目中常用的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资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash