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 ...
随机推荐
- Sublime Text notes
1. 设置在窗口右下方显示文件的编码,在user preferences里加上以下的配置 2.设置用新标签页打开新文件而不是用新窗口打开,将以下配置改为false(默认为true)
- c语言实践 打印三角形
效果如下: 我是怎么考虑这个问题的. 首先共有5行,那么我们需要一个循环,让这个循环走5遍. 那么我们有个大概的代码结构 for(int i=0;i<5;i++) { } i的定义域是[0,4] ...
- Learning from Imbalanced Classes
https://www.svds.com/learning-imbalanced-classes/ 下采样即 从大类负类中随机取一部分,跟正类(小类)个数相同,优点就是降低了内存大小,速度快! htt ...
- xgboost 调参参考
XGBoost的参数 XGBoost的作者把所有的参数分成了三类: 1.通用参数:宏观函数控制. 2.Booster参数:控制每一步的booster(tree/regression). 3.学习目标参 ...
- excel中COUNTIF的使用
=(COUNTIF(D9:AH9,"●")+COUNTIF(D7:AH7,"●"))*0.5
- 基于IKAnalyzer搭建分词服务
背景 前端高亮需要分词服务,nlp团队提供的分词服务需要跨域调用,而且后台数据索引使用的IK分词.综合评价,前端分词也需要基于IK分词器. IKAnalyzer服务已经停止更新,且对Lucene支持仅 ...
- LibreOJ 6000 搭配飞行员(最大流)
题解:最基础的最大流,按照主飞行员与起点建边,副飞行员与终点建边,可以同坐的主副飞行员之间建边,值均为一,然后跑一边最大流就完美了! 代码如下: #include<queue> #incl ...
- How do I create a .pyc file?
Python automatically compiles your script to compiled code, so called byte code, before running it. ...
- wp7启动+幻灯片效果
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Wi ...
- angular 输入属性
import { Component, OnInit, Input } from '@angular/core'; @Component({ selector: 'app-order', templa ...