java 并发完成任务之CountDownLatch
1.CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则处于等待状态,调用countDown()方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。
2.微服务使数据获取来源多样化,而客户端所需要的数据是组合数据,这样就需要在服务端做一个拼装
3.如获取客户数据时要从多个来源获取相关的数据给客户端,
1)当前客户消费总额 (在客户服务里)
2)当前客户消费总额在所有客户里的排序 (在客户排序服务里)
import java.util.Random;
import java.util.concurrent.CountDownLatch; public class App { public static void main(String[] args) throws InterruptedException {
CountDownLatch latch=new CountDownLatch(2);
Work worl = new Work(latch) ;
Work wor2 = new Work(latch) ;
worl.start();
wor2.start();
latch.await(); CustomerInfo customerInfo=new CustomerInfo();
customerInfo.setConsumeSum((int)worl.getResult());
customerInfo.setSortInAllCustomer((int)wor2.getResult());
System.out.println(customerInfo);
}
} class CustomerInfo
{
private int sortInAllCustomer;
private int consumeSum; public int getSortInAllCustomer() {
return sortInAllCustomer;
} public void setSortInAllCustomer(int sortInAllCustomer) {
this.sortInAllCustomer = sortInAllCustomer;
} public int getConsumeSum() {
return consumeSum;
} public void setConsumeSum(int consumeSum) {
this.consumeSum = consumeSum;
} @Override
public String toString()
{
return String.format("当前客户消费%d,在所有用户中排名第%d",getConsumeSum(),getSortInAllCustomer());
} } class Work extends Thread
{
private CountDownLatch latch;
private Object result; public Work(CountDownLatch latch)
{
this.latch=latch;
} @Override
public void run() {
try {
Random random=new Random();
int ms = random.nextInt(10)+1;
Thread.sleep(1000*ms);
this.result=ms;
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
latch.countDown();
}
} public Object getResult() {
return result;
}
}
java 并发完成任务之CountDownLatch的更多相关文章
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...
- Java并发工具类 - CountDownLatch
Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore (总结)
下面对上面说的三个辅助类进行一个总结: 1)CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同: CountDownLatch一般用于某个线程A等待 ...
- 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...
- Java并发工具类CountDownLatch源码中的例子
Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...
- 【转】Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在j ...
- 深入浅出Java并发中的CountDownLatch
1. CountDownLatch 正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.在Java并发中 ...
- 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier,Semaphore,Exchanger
1. 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join ...
- Java 并发工具类 CountDownLatch、CyclicBarrier、Semaphore、Exchanger
本文部分摘自<Java 并发编程的艺术> CountDownLatch CountDownLatch 允许一个或多个线程等待其他线程完成操作.假设现有一个需求:我们需要解析一个 Excel ...
随机推荐
- Hyperledger Fabric Orderer节点启动
Orderer 节点启动通过 orderer 包下的 main() 方法实现,会进一步调用到 orderer/common/server 包中的 Main() 方法. 核心代码如下所示. // Mai ...
- Python学友
独学而无友,则孤陋而寡闻,python学习过程中希望多和学友交流,一起进步. 开源中国 j_hao104 微信公众号: Pythoner每日一报 https://my.oschina.net/jhao ...
- select样式调整
如果select样式如下图:是因为添加了 border-color:#adb7d6; border-width:1px; 样式 删除上面两个样式属性,效果如下图:
- oracle数据库查询全系整理
oracle数据库方面的知识到今天已经整理了12篇.当然,这不是终点,这只是一个开始,希望我写的文章可以帮助更多初学数据库的童鞋快速上手,如果你觉得文章对你有帮助,那么恭喜你已经入门了,数据库里面的知 ...
- libtool: syntax error near unexpected token `]*
../libtool: line 543: syntax error near unexpected token `]*' ../libtool: line 543: ` *[\[\~\#\ ...
- 关于在jeecms中css,图片,html,模板是如何组装成——part1
先从HTML入手:index.html <!DOCTYPE HTML> <html> <meta name="viewport" content=&q ...
- Tomcat调优总结
Tomcat 优化分为系统优化,Java虚拟机调优,Tomcat本身的优化. Tomcat 如何起停 ./catalina.sh stop ./catalina.sh start/sbin/servi ...
- LSI SAS3008 RAID配置方法
7.1 概述 LSI SAS3008 RAID 控制卡(以下简称LSI SAS3008)是基于Fusion-MPT™ (消息传递技术)架构的8端口12Gbit/s SAS控制器,并采用PCIe3.0 ...
- SQL语句也可以重构优化
真的,不管是程序中的代码可以重构优化,在SQL Server的语句,也是可以的.下面举个例子,在存储过程中,所传入的数据参数不能为空,另外在对数据表进行更新时,所更新的字段如果是空的话,就更新,如果传 ...
- linux 改变系统时间
date 查看系统时间 date -s 04/05/16 日期设置成2016年4月5日 date -s 15:03:32 日期设置成2016年4月5日15:03:32 上述两步可以直接写成这样一 ...