- 浏览: 7942849 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
public class StatsDemo { final static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); final static String startTime = sdf.format(new Date()); public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(5);// 两个赛跑者 Stats stats1 = new Stats("任务A", 1000, latch); Stats stats2 = new Stats("任务B", 2000, latch); Stats stats3 = new Stats("任务C", 2000, latch); Stats stats4 = new Stats("任务D", 2000, latch); Stats stats5 = new Stats("任务E", 2000, latch); stats1.start();//任务A开始执行 stats2.start();//任务B开始执行 stats3.start();//任务C开始执行 stats4.start();//任务D开始执行 stats5.start();//任务E开始执行 latch.await();// 等待所有人任务结束 System.out.println("所有的统计任务执行完成:" + sdf.format(new Date())); } static class Stats extends Thread { String statsName; int runTime; CountDownLatch latch; public Stats(String statsName, int runTime, CountDownLatch latch) { this.statsName = statsName; this.runTime = runTime; this.latch = latch; } public void run() { try { System.out.println(statsName+ " do stats begin at "+ startTime); //模拟任务执行时间 Thread.sleep(runTime); System.out.println(statsName + " do stats complete at "+ sdf.format(new Date())); latch.countDown();//单次任务结束,计数器减一 } catch (InterruptedException e) { e.printStackTrace(); } } } } 由于要同步返回统计数据,这里我们使用到了CountDownLatch类,它是Java5中新增的一个并发工具类,其使用非常简单,参考上面的伪代码给出了详细的使用步骤。 CountDownLatch用于同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成。CountDownLatch典型的用法是将一个程序分为N个互相独立的可解决任务,并创建值为N的CountDownLatch。当每一个任务完成时,都会在这个锁存器上调用countDown,等待问题被解决的任务调用这个锁存器的await,将他们自己拦住,直至锁存器计数结束。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1578方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2019前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3470info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2236import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 490https://mp.weixin.qq.com/s/b3Sx ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 611https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 671https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 438https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5441 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3101微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 617https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1844什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 967本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1363原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 863public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 674在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 940-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 772一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1907介绍个不错的RESTFUL MOCK的工具wiremock,地 ... -
LINUX下EPOLL等不错的文章收藏
2018-04-25 09:35 5631 通俗讲解 异步,非阻塞和 IO 复用 https:/ ...
相关推荐
- 使用CountDownLatch实现多线程并行计算,最后汇总结果的例子。 - 使用CyclicBarrier实现多线程分治策略,每个子任务完成后来一次全局计算的例子。 - 线程间的异常处理,包括中断和超时的处理。 - 结合Future和...
在这个例子中,3个线程分别执行任务,每个任务完成后调用 `countDown()`。主线程调用 `await()` 阻塞,直到计数器归零,表明所有线程已完成任务,主线程继续执行后续操作。 总的来说,`CountDownLatch` 是一种有效...
在上面的例子中, CountDownLatch被用来模拟百米赛跑的场景,其中八名运动员同时起跑,由于速度的快慢,肯定会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的...
这个例子展示了 CountDownLatch 如何帮助协调多线程间的同步。等待线程通过调用 `await()` 方法阻塞自己,直到所有工作线程完成它们的 `run()` 方法,调用 `countDown()`。一旦计数器达到0,所有等待的线程将被释放...
在这个例子中,`CountDownLatchTest`的主方法创建了3个线程模拟3位乘客登机,`CountDownLatch`的计数器初始化为3。当所有乘客登机完成后,主线程会继续执行并宣布飞机起飞。 `CountDownLatch`在并行任务拆分和优化...
例如,在篮球比赛的例子中,控球后卫(主线程)等待所有球员到位后才开始进攻。 ```java CountDownLatch countDownLatch = new CountDownLatch(5); // 5位球员 // 模拟球员到位 for (int i = 0; i ; i++) { ...
在上述例子中,它被用来模拟一场有5位运动员的比赛,确保所有运动员都准备好后比赛才开始,并且所有运动员都完成比赛后比赛才结束。 首先,我们来看一下`CountDownLatch`的基本原理。构造`CountDownLatch`时需要...
在上述的百米赛跑例子中,CountDownLatch被巧妙地应用了。`CountDownLatch(int count)`构造函数接收一个初始计数值,表示需要等待的线程数量。每个线程完成任务后,调用`countDown()`方法使计数值减一,直到计数值减...
在上面的例子中,我们使用CountDownLatch来控制线程的执行顺序,使得主线程等待代表选手的线程执行完成后再执行。我们可以看到,通过CountDownLatch的使用,我们控制了线程的执行顺序。在上面的代码中,我们使用到...
举个例子,假设我们有n个子线程需要完成任务,主线程可以使用CountDownLatch来等待所有子线程完成。当所有子线程调用`countDown()`后,主线程的`await()`方法将返回,表明所有子任务都已结束。 总结,Semaphore和...
5. **多线程**:Java支持多线程编程,例子会介绍Thread类的使用、线程同步方法(如synchronized关键字、wait()、notify()等)以及并发工具类如Semaphore、CountDownLatch等。 6. **网络编程**:Java的Socket编程...
在`CountDownLatchDemo1`的例子中,展示了5个线程代表5个工人,每个工人完成检查后,`countDown()`会使计数器减1。主线程调用`await()`方法,直到计数器归零,表示所有检查都完成,然后继续执行后续任务。 **...
以下是一个简单的使用CountDownLatch的例子: ```java import java.util.concurrent.CountDownLatch; public class TestThread extends Thread { CountDownLatch cd; String threadName; public TestThread...
这个例子展示了`CountDownLatch`如何协调多个线程的执行顺序,确保在所有预设任务完成后,主任务才能继续执行。在实际应用中,`CountDownLatch`常用于分布式系统、多线程协作、测试场景等,例如等待所有客户端连接...
CountDownLatch更适合于一次性使用的场景,用于让一个线程等待其他线程完成特定操作,而CyclicBarrier则适用于多轮迭代的场景,让一组线程在每轮开始前等待所有线程到达同一位置。了解并熟练运用这些工具,能有效...
CountDownLatch latch = new CountDownLatch(1); // 注册Watcher,监听数据节点 zookeeper.getData(PATH, true, (__, stat) -> { System.out.println("数据节点已更改"); latch.countDown(); }, new Stat());...
15. **并发编程**:讲解线程池的使用、并发工具类如Semaphore、CountDownLatch等,以及并发容器如ConcurrentHashMap。 16. **Lambda表达式和函数式编程**:介绍JDK 8引入的Lambda表达式,以及Stream API的使用,...
线程和并发处理也是Java的强项,你可能会找到多线程创建(Thread类和Runnable接口)、同步机制(synchronized关键字、wait/notify、Lock接口)、并发工具类(如ExecutorService、Semaphore、CountDownLatch)的实例...
举个例子,假设我们有5个子线程需要同时启动并执行一项工作,而主线程需要等待所有子线程工作完成后才继续执行。这时,我们可以在主线程中创建一个初始值为5的CountDownLatch,每个子线程执行完工作后调用`countDown...
Concurrent下的例子,涵盖了大部分常用类 例如BlockingQueue、CountDownLatch、CyclicBarrier、Exchanger、ExecuteService、lock、timeutil等