Java并发:等待事件发生后所有线程继续执行
来源:互联网 发布:美工兼职 编辑:程序博客网 时间:2024/05/21 11:36
转载请注明出处:jiq•钦's technical Blog - 季义钦
等待某一个指定的事件发生后,才让多个等待的线程继续执行,以下是我能想到的几个方法,欢迎讨论、指正。
1.闭锁CountDownLatch
闭锁是典型的等待事件发生的同步工具类,将闭锁的初始值设置1,所有线程调用await方法等待,当事件发生时调用countDown将闭锁值减为0,则所有await等待闭锁的线程得以继续执行。
2.阻塞队列BlockingQueue
所有等待事件的线程尝试从空的阻塞队列获取元素,将阻塞,当事件发生时,向阻塞队列中同时放入N个元素(N的值与等待的线程数相同),则所有等待的线程从阻塞队列中取出元素后得以继续执行。
3.信号量Semaphore
设置信号量的初始值为等待的线程数N,一开始将信号量申请完,让剩余的信号量为0,待事件发生时,同时释放N个占用的信号量,则等待信号量的所有线程将获取信号量得以继续执行。
4.栅栏CyclicBarrier
设置栅栏的初始值为1,当事件发生时,调用barrier.wait()冲破设置的栅栏,将调用指定的Runable线程执行,在该线程中启动N个新的子线程执行。这个方法并不是让执行中的线程全部等待在某个点,待某一事件发生后继续执行。
特别注意:不能用“条件队列”,多个线程阻塞等待在条件队列上,事件发生时调用“条件队列”的notifyAll方法或者signalAll方法虽然能唤醒所有等待线程,但是只有一个线程能够获得该条件队列的锁得以调度执行,其它线程未获得锁仍将继续阻塞等待。
1 0
- Java并发:等待事件发生后所有线程继续执行
- 多个子线程并发执行,主线程等待所有子线程都结束后再继续运行
- CountDownLatch实现主线程等待所有子线程运行结束后再继续执行的实现
- 主线程等待所有子线程执行完毕后再继续的问题
- Java并发:主线程等待多个子线程执行完才继续执行
- java线程池主线程等待子线程执行完成后再继续处理后面工作
- java线程池主线程等待子线程执行完成后再继续处理后面工作
- java 等待所有线程执行完毕
- Java高并发--等待通知和挂起继续执行
- java中 等待所有子线程结束 后再执行一段代码。
- java中 等待所有子线程结束 后再执行一段代码。
- 主线程等待所有子线程完成后再执行
- 多线程中主线程等待所有子线程执行完再继续执行的解决方法
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- java 线程wait()与notify()的用法(被唤醒后的线程到底重新执行同步代码块还是从那是等待的那里继续执行)
- Java并发编程示例(六):等待线程执行终止
- Java多线程--主线程等待所有子线程执行完毕
- 如何等待一个线程完成后才继续执行之后的操作
- python文件读写
- 分享我原油金融直播系统开发的过程心得
- 链栈的基本操作
- 如何应用assets下的文件
- 机器学习基石第七讲:the vc dimension
- Java并发:等待事件发生后所有线程继续执行
- LeetCode *** 79. Word Search
- java基础学习(3)
- android.webkit.WebView/WebViewClient/WebChromeClient
- 从头认识多线程-2.2 synchronized持有对象锁与类锁的相同点
- Hibernate4实战 之 第二部分:Hibernate的基本配置
- 循环队列的基本操作
- Paxos算法
- Java中的super关键字