- 浏览: 461064 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (369)
- javascript html (20)
- java (31)
- jquery (15)
- jcrop (0)
- JEECG (1)
- ajax (3)
- 反射 (3)
- VI (1)
- mysql (48)
- easyui (1)
- svn (2)
- MD5 加密 (1)
- spring (14)
- ORACLE (8)
- 经验总结 (1)
- TCP/IP协议 (1)
- ICMP协议 (1)
- eclipse (1)
- Reflect (1)
- linux (21)
- android (5)
- excel 操作 (1)
- java tree (1)
- html (1)
- plupload (1)
- mongodb (9)
- aes (1)
- python (1)
- java relax (1)
- highcharts (2)
- json (2)
- java 多线程 (30)
- maven (2)
- 设计模式 (1)
- jsp+js (2)
- 面向对象 (1)
- jvm (16)
- 缓存 (1)
- proxy (1)
- 聊侃 (1)
- 面经 (1)
- java 字节 (1)
- java 类加载器 (2)
- java 基础 (2)
- java 语法糖 (1)
- java 位运算 (1)
- 排序 (3)
- java 服务器性能优化 (19)
- 网络编程 (2)
- jvm 参数设置 (0)
- jersey (1)
- webservice (2)
- nginx+多tomcat 集成 (5)
- nginx (16)
- squid (3)
- memcached (5)
- 正则表达式 (1)
- 常用免费接口 (1)
- jpa (1)
- win7 (1)
- java处理大文件 (1)
- js正则表达式 (1)
- tomcat (1)
- java 敏感字 (1)
- 系统架构优化 (4)
- 学习 (1)
- 本地测试QQ微博第三方登陆 (1)
- java 错误 (1)
- 微信支付 (1)
- https (1)
- httpclient (1)
- awk (2)
- loadrunner (1)
- sql server 2008 (3)
- git (4)
- sql server2008 (1)
- solr (2)
- centos (1)
- 数据存储架构 (3)
- log4j (1)
- weboffice (1)
- 并发编程 (1)
- postgreSQL (0)
- ssl (1)
- openssl (1)
- activeMQ (2)
- IDEA (1)
- shell (1)
- ansible (4)
- docker (2)
- grafana (1)
- jmeter (1)
- TLS (1)
- 将博客搬至CSDN (1)
最新评论
-
dida1990:
啊喔,过去了这么久,不过还是评一个。谁说uuid的hashCo ...
高并发生成订单号(二) -
annan211:
yclovesun 写道使用了uuid,为什么还要machin ...
高并发生成订单号(二) -
yclovesun:
使用了uuid,为什么还要machineId?uuid已经可以 ...
高并发生成订单号(二) -
u013280917:
太深奥,看不懂
mysql优化特定类型的查询
Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。
你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。
应用场景:实际上可以简单理解一下,初始化一个固定数量的CountDownLatch ,然后启动两组线程去操作,一组调用await方法(阻塞),一组调用countDown(将计数值减1),一直到调用countDown的那组线程将计数值减为0的时候,被阻塞的线程才开始去执行。
如果计数值不为0的时候,被阻塞的线程会继续被阻塞,直到计数值被减为0.
结果为:
你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。
应用场景:实际上可以简单理解一下,初始化一个固定数量的CountDownLatch ,然后启动两组线程去操作,一组调用await方法(阻塞),一组调用countDown(将计数值减1),一直到调用countDown的那组线程将计数值减为0的时候,被阻塞的线程才开始去执行。
如果计数值不为0的时候,被阻塞的线程会继续被阻塞,直到计数值被减为0.
package thread; import java.lang.reflect.Constructor; import java.util.concurrent.CountDownLatch; public class CountDownLarchDemo { public static void main(String[] args) throws Exception { CountDownLatch latch = new CountDownLatch(8); Th th = new Th(latch); Td td = new Td(latch); for(int i=0;i<8;i++){ new Thread(th).start(); new Thread(td).start(); } } } class Th implements Runnable{ private CountDownLatch latch; public Th(CountDownLatch latch){ this.latch = latch; } @Override public void run() { try { latch.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--------------is working..."+latch.getCount()); } } class Td implements Runnable{ private CountDownLatch latch; public Td(CountDownLatch latch){ this.latch = latch; } @Override public void run() { latch.countDown(); System.out.println(Thread.currentThread().getName()+"---is watting..."+latch.getCount()); } }
结果为:
Thread-1---is watting...7 Thread-3---is watting...6 Thread-5---is watting...5 Thread-7---is watting...4 Thread-9---is watting...3 Thread-13---is watting...2 Thread-11---is watting...1 Thread-15---is watting...0 Thread-4--------------is working...0 Thread-12--------------is working...0 Thread-14--------------is working...0 Thread-2--------------is working...0 Thread-0--------------is working...0 Thread-10--------------is working...0 Thread-8--------------is working...0 Thread-6--------------is working...0
发表评论
-
java 多线程操作数据库 及 静态bean注入
2018-01-09 10:47 916package com.robustel.rlink.de ... -
Amino 框架简介
2014-10-17 11:30 1427对数据加锁是实现多线程的一种策略,但是加锁无疑会增加系 ... -
Java 重入锁(ReentrantLock)和内部锁(synchronized)
2014-10-16 15:44 1594ReentrantLock 和 synchronize的 ... -
Java 锁分离
2014-10-16 15:35 1332读写锁思想的延伸就是锁分离。读写锁根据读写操作功能上 ... -
java 高性能运算-- 双端队列
2014-10-15 16:04 1046JDK 1.6中 提供了一种双端队列,简称 Dequ ... -
java 高性能运算--并发队列
2014-10-15 15:33 2490JDK 提供了两套并发队列的实现,一个是以 Conc ... -
并发模式下的单例创建
2014-09-29 16:20 788单例模式的创建 分为 ... -
Java 同步集合的应用
2014-09-14 23:45 0Java 同步集合的应用 -
java 阻塞队列的应用
2014-09-14 23:44 0java 阻塞队列的应用 -
java 多线程集合
2014-09-14 23:28 0java 多线程集合 -
java Exchanger 线程数据交换
2014-09-14 22:56 0java Exchanger 线程数据交换 -
java 多线程之 CyclicBarrier
2014-09-13 19:25 818CyclicBarrier (周期障碍)类可以帮助同步,它允许 ... -
java CyclicBarrier 循环阻塞
2014-09-12 22:43 436java CyclicBarrier 循环阻塞 -
java 多线程的锁消除
2014-09-12 18:31 1243Java 中使用同步 来保证数据的安全性,但是对于一些明显不会 ... -
java锁的种类以及辨析(一):自旋锁
2014-09-12 16:22 1633Java的多线程安全是基于Lock机制(或者隐式锁synchr ... -
Java锁的种类以及辨析
2014-09-12 15:15 1575锁作为并发共享数据,保证一致性的工具,在java平台有多种实现 ... -
java Semaphore 信号量详解和实例
2014-09-12 11:51 2154生产者线程用于往链表里添加节点,数个工作线程从链表取出节点并处 ... -
4个线程,2个每次加1,两个每次减1
2014-09-01 23:44 852package threadTest; public ... -
线程范围内的共享数据 ThreadLocal 分析与详解
2014-08-30 19:21 811Java 线程范围内的数据共享机制,需要解决的问题是 : 多 ... -
java多线程之Semaphore信号量详解
2014-08-27 13:35 1310原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
相关推荐
在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...
15. **并发编程**:Java提供了丰富的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,实例将展示如何高效地管理并发任务。 通过逐一研究这些源码实例,不仅可以加深对Java语言的理解,还能提升实际编程...
Java CountDownLatch 完成异步回调实例详解 Java 中的 CountDownLatch 是一个同步辅助类,允许一个线程等待其他线程完成操作。它是一种非常有用的工具,用于在多线程环境中实现异步回调。在本文中,我们将学习如何...
JAVA CountDownLatch(倒计时计数器)用法实例 在 Java 中,CountDownLatch 是一种同步工具,允许一个或多个线程等待其他线程完成任务。它是一种倒计时器,使用计数来控制线程的执行顺序。本文将详细介绍 ...
在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。`CountDownLatch`的主要作用是允许一个或多个线程等待其他线程完成操作。在上述例子中,...
Java并发包`java.util.concurrent`提供了高级并发工具,如`Semaphore`(信号量)、`CyclicBarrier`(回环栅栏)、`CountDownLatch`(计数器门闩)等,它们可以更灵活地控制线程执行。例如,`CountDownLatch`常用于...
10. **并发库**:Java提供了丰富的并发工具类,如ExecutorService、Semaphore、CountDownLatch等,实例会展示如何高效地管理线程池和控制并发。 11. **Java IO/NIO**:NIO(New Input/Output)是Java的非阻塞I/O...
6. **多线程**:Java提供了丰富的多线程支持,源码中会包含Thread、Runnable接口的使用,以及同步机制如synchronized关键字、wait/notify机制和并发工具类(如Semaphore、CountDownLatch等)的实例。 7. **网络编程...
1. 创建一个CountDownLatch实例,初始化为线程数量。 2. 将数据分为多个批次,每个批次分配给一个线程处理。 3. 每个线程在开始执行前调用`latch.countDown()`,表示它已经准备好开始工作。 4. 线程执行数据插入操作...
本资源“Java高级编程实例 100个”提供了丰富的实践案例,旨在帮助初学者深入理解并熟练应用这些高级特性。 1. **多线程**:在Java中,多线程是并发执行任务的基本方式。学习如何创建Thread类的子类,使用Runnable...
15. **并发工具类**:Java并发包提供了一些实用工具,如ExecutorService、Semaphore、CountDownLatch等。实例可能包含如何有效管理并发任务的代码。 每个源码实例都对应一个特定主题,通过分析和实践这些例子,...
10. **并发工具**:如CountDownLatch、CyclicBarrier、Semaphore等,这些工具可以帮助构建复杂的并发程序,实例可能展示如何有效使用它们。 11. **Java 8及以后的新特性**:如Lambda表达式、Stream API、Optional类...
1. 初始化:通过`CountDownLatch(int count)`构造方法创建一个CountDownLatch实例,其中count参数表示计数器的初始值。 ```java CountDownLatch latch = new CountDownLatch(3); // 设置为3,表示有3个子任务 ``` 2....
Java中CountDownLatch进行多线程同步详解及实例代码 CountDownLatch是Java中的一种多线程同步辅助类,主要用来同步多个任务的执行。它允许一个或多个线程等待,直到一组正在其他线程中执行的操作完成。下面是对...
《Java经典实例(第2版)》是一本深入浅出的Java编程教程,它涵盖了Java语言的各个方面,旨在帮助读者掌握Java编程的核心技能,并通过实际的示例加深理解。PDF书籍部分提供了详尽的理论解释和清晰的代码展示,而源代码...
Java JDK实例开发宝典源代码是一份非常宝贵的资源,它涵盖了Java开发中的各种核心概念和技术。JDK(Java Development Kit)是Java编程的基础,包含了Java运行环境、编译器、调试器以及各种工具,是每个Java开发者...
Java并发包提供了如CountDownLatch、CyclicBarrier、Semaphore等并发工具类,用于协调多个线程间的协作。这些工具在分布式计算、并行任务调度等领域有广泛应用。 通过这些实例,学习者能够深入理解Java多线程编程,...
在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
这里可能需要用到Java的并发工具类,如CountDownLatch或者CyclicBarrier。 4. **利息计算**:根据银行的利率策略,定期计算并添加到账户余额中。这可能涉及到时间间隔的处理,可以使用Java的定时任务框架如...