告警性能优化过程中,遇到如下问题:1、 在数据库计算几十万个实体的KPI值的方差;2、 计算结果进行表格化处理。

这里KPI包含多个Counter的数据库函数运算(比如Decode,AVG等函数),方差也是数据库函数运算,性能比较差。

步骤1中每个实体独立计算方差,步骤2需要方差结果协同处理,所以很自然的联想到步骤1分实体多线程处理,步骤2等待步骤1所有线程完成后才开始处理。这里我们使用CountDownLatch进行线程等待,示例代码如下:

package com.coshaho.threadpool;

import java.util.concurrent.CountDownLatch;

/**
* CountDownLatch学习
* @author coshaho
*/
public class MyCountDownLatch
{
public static void main(String[] args) throws InterruptedException
{
// 定义线程等待变量CountDownLatch,此处定义等待3个线程执行完成
CountDownLatch latch = new CountDownLatch(3);
// 定义3个线程,并传入线程等待变量
new Thread(new MyCountDownLatch().new MyWork("Thread1",latch)).start();
new Thread(new MyCountDownLatch().new MyWork("Thread2",latch)).start();
new Thread(new MyCountDownLatch().new MyWork("Thread3",latch)).start();
// 等待3个线程执行完成
latch.await();
System.out.println("All works are done.");
} /**
* 线程任务
* @author coshaho
*/
private class MyWork implements Runnable
{
private String workName;
private CountDownLatch latch;
public MyWork(String workName, CountDownLatch latch)
{
this.workName = workName;
this.latch = latch;
} @Override
public void run()
{
try
{
System.out.println("Thread " + workName + " is running.");
Thread.sleep(1000);
System.out.println("Thread " + workName + " is stop.");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
// 线程执行完成,线程等待变量减少
latch.countDown();
}
}
}
}

运行结果如下:

Thread Thread1 is running.
Thread Thread3 is running.
Thread Thread2 is running.
Thread Thread1 is stop.
Thread Thread3 is stop.
Thread Thread2 is stop.
All works are done.

线程等待——CountDownLatch使用的更多相关文章

  1. Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行

    Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执 ...

  2. Java多线程-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier

    Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-从一个错误的双重校验锁 ...

  3. 线程协作-CountDownLatch

    CountDownLatch允许一个或多个线程等待其他线程完成操作.

  4. 线程同步器CountDownLatch

    Java程序有的时候在主线程中会创建多个线程去执行任务,然后在主线程执行完毕之前,把所有线程的任务进行汇总,以前可以用线程的join方法,但是这个方法不够灵活,我们可以使用CountDownLatch ...

  5. SQL之收集SQL Server线程等待信息

    要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_ ...

  6. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  7. Java多线程系列--“基础篇”05之 线程等待与唤醒

    概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...

  8. java 多线程—— 线程等待与唤醒

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  9. 收集SQLServer线程等待信息

    要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_ ...

随机推荐

  1. H3C系列之三层交换机开启telnet管理的配置

    环境介绍>>>>>>>>>>>>>>>>>>>>交换机名牌:H3C交换机类型:三 ...

  2. dhroid - ioc基础(@Inject*)

    1 ioc即控制反转.控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心.控制反转还有一 ...

  3. react+babel+webpack初试

    在上一篇,我们简单学习了webpack学习,现在这里我们简单学习一下react+babel+webpack,进行编译react语法jsx以及结合es6写法. 这里我就简单的直接上demo: packa ...

  4. Express 4.x Node.js的Web框架----《转载》

    本文使用node.js v0.10.28 + express 4.2.0 1 Express概述 Express 是一个简洁而灵活的node.js的MVC Web应用框架,提供一系列强大特性创建各种W ...

  5. linux下面安装coreseek与mmseg

    1tar xzvf coreseek-3.2.14.tar.gz2cd mmseg-3.2.14/./configure --prefix=/usr/local/mmseg3 checking for ...

  6. 洛谷P2414 阿狸的打字机【AC自动机】【fail树】【dfs序】【树状数组】

    居然真的遇上了这种蔡队题.瑟瑟发抖. 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿 ...

  7. TOP100summit:【分享实录】Twitter 新一代实时计算平台Heron

    本篇文章内容来自2016年TOP100summit Twitter technical lead for Heron Maosong Fu 的案例分享. 编辑:Cynthia Maosong Fu:T ...

  8. Django数据库相关操作

    首先,在settings.py中加入应用的名称,让数据库知道使用的是哪个应用,然后给那个应用创建表. 在settings.py中配置数据库相关参数,默认使用sqlite3不用配置 编辑models.p ...

  9. UDR rsync

    1. SOCK_DGRAM  UDP packets SOCK_STREAM   TCP 不同的协议下的 套接字 数据包 面向数据的 面向连接的 套接字 2. 数据 UDP 文件 TCP https: ...

  10. 20144306《网络对抗》Web安全基础实践

    1  实验内容 SQL注入攻击 XSS攻击 CSRF攻击 2  实验过程记录 2.1WebGoat说明与安装 关于WebGoat WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台 ...