- 浏览: 427051 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
在多线程设计中,我猜常常会遇到线程间相互等待以及某个线程等待1个或多个线程的场景,比如多线程精密计算和大量数据处理,这里写下我自己的体会和理解。
我想应该有很多办法,如果是简单的1:1关系,那么可以wait()和notify()解决,就像一把锁和一把钥匙;如果是1:N关系,这个1就需要关心N的所有状态了,最笨的办法是1可以去查看N当前的状态,轮询询问工作是否做完。而好点的办法是N做完后主动告诉1,然后N就会有2种选择,要么听从1的命令,要么继续干自己其他的活。 用传统的方法我想应该是都能实现的,而JDK1.5提供了CyclicBarrier与CountDownLatch来解决了这两个问题,而她们的区别是: CyclicBarrier使所有线程相互等待,而CountDownLatch使一个或多个线程等待其他线程。区别类似上面蓝色字体,CountDownLatch不会等待其他线程了,只要做完自己的工作就干自己的活去了,也就是run()方法里其他的任务。 Example: 输出的结果为: The bow is coming 如上所说do other thing不受影响。 写了一个CyclicBarrier的例子: 输出结果为: Wait... 这应该是CyclicBarrier吧?
public static void testCountDownLatch() throws InterruptedException{
CountDownLatch cdl=new CountDownLatch(2);
ExecutorService exe=Executors.newFixedThreadPool(2);
class Bow implements Runnable{
CountDownLatch cdl;
public Bow(CountDownLatch cdl){
this.cdl=cdl;
}
public void run(){
System.out.println("The bow is coming");
System.out.println("kick a bow ");
this.cdl.countDown();
System.out.println("do other thing");
}
}
exe.execute(new Bow(cdl));
exe.execute(new Bow(cdl));
exe.shutdown();
System.out.println("Wait...");
cdl.await();
System.out.println("End..");
}
public static void main(String[] args) {
try {
Test.testCountDownLatch();
} catch (InterruptedException e) {
}
}
kick a bow
do other thing
Wait...
The bow is coming
kick a bow
do other thing
End..
public static void testCyclicBarrier() throws InterruptedException, BrokenBarrierException{
CyclicBarrier barr=new CyclicBarrier(2+1);
ExecutorService exe=Executors.newFixedThreadPool(2);
class Bow implements Runnable{
CyclicBarrier barr;
public Bow(CyclicBarrier barr){
this.barr=barr;
}
public void run(){
System.out.println("The bow is coming");
System.out.println("kick a down");
try {
barr.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("do other thing");
}
}
exe.execute(new Bow(barr));
exe.execute(new Bow(barr));
exe.shutdown();
System.out.println("Wait...");
barr.await();
System.out.println("End..");
}
public static void main(String[] args) {
try {
Test.testCyclicBarrier();
} catch (InterruptedException e) {
}
catch (BrokenBarrierException e) {
}
}
The bow is coming
kick a down
The bow is coming
kick a down
do other thing
End..
do other thing
兄弟你的例子来说明问题似乎让人不好琢磨。我也写了两个例子,大家一起学习下
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);//构造方法里的数字标识有几个线程到达集合地点开始进行下一步工作
for(int i=0;i<3;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点1,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点2,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达集合地点3,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
发表评论
-
深入JVM锁机制
2011-09-19 01:00 971目前在Java中存在两种 ... -
java 正则表达式 非捕获组(特殊构造)Special Constructs(Non-Capturing)
2011-06-20 23:15 1640针对Java API文档中的正则表达式关于特殊构造(非捕获组) ... -
Java文件映射[mmap]揭秘
2011-06-08 20:10 1169前言 相信现在 ... -
原创 java的Mmap二三事
2011-06-08 19:46 1195转自 :http://blog.csdn.net/kabini ... -
java 安全沙箱模型详解
2011-04-18 16:29 936起到第一道安全保障作 ... -
非阻塞算法-ReentrantLock代码剖析之ReentrantLock.lock
2011-04-15 13:59 1078ReentrantLock是java.util.concurr ... -
Java KeyStore
2011-04-13 17:17 1463简介Java自带的keytool工具是个密钥和证书管理工具。它 ... -
Security Managers and the JavaTM 2 SDK
2011-04-12 13:37 771The original Link : http://do ... -
Something about SecurityManager
2011-04-12 13:33 779The Java Security was made up o ... -
Using the Java SecurityManager with Tomcat
2011-04-12 13:30 991Why use a SecurityManager? The ... -
Java安全管理器(Security Manager)(
2011-04-11 14:54 881转载自: http://blog.sina.com.cn/s/ ... -
Java对象的强、软、弱和虚引用(1)
2011-04-01 08:44 794本文介绍Java对象的强 ... -
Java对象的强引用、软引用、弱引用和虚引用
2011-04-01 08:39 902在JDK1.2以前的版本中, ... -
java 高并发 ReentrantLock -- 可重入的锁
2011-03-30 08:09 2364ReentrantLock -- 可重入的锁 可重入锁指 ... -
线程运行栈信息的获取
2011-03-24 17:23 1306线程运行栈信息的获取 ... -
java序列化——Serializable
2011-03-15 23:17 1068类通过实现 java.io.Serializable 接口 ... -
Java aio(异步网络IO)初探
2011-03-11 16:34 1559按照《Unix网络编程》的 ... -
JAVA NIO 简介
2011-03-11 13:38 11121. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
[字节码系列]ObjectWeb ASM构建Method Monitor
2011-03-08 18:08 894在前面的篇章中,我们看到Java Instru ... -
深入了解Java ClassLoader、Bytecode 、ASM、cglib
2011-03-08 16:35 854一、Java ClassLoader 1,什 ...
相关推荐
- **计数机制**:CountDownLatch的计数器只能递减且不可重置,而CyclicBarrier的计数器可以在所有线程到达屏障点后重置。 - **等待策略**:CountDownLatch的线程等待是单向的,而CyclicBarrier可以让所有线程一起...
目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ReadWriteLock倒计数器 CountDownLatch循环栅栏 CyclicBarrier信号量 Semaphore 线程安全 Thread Safety JMM JMM(Java Memory Model)是一种基于计算机内存...
闭锁,由`java.util.concurrent.CountDownLatch`类实现,它是一个计数器,初始化时传入一个整数count,表示需要等待的线程数量。每当一个线程完成其任务时,会调用`countDown()`方法,将计数器减一。所有线程完成...
JUC(Java Util Concurrency)是Java提供的并发工具包,包含了许多高级并发组件,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门锁)等,它们极大地简化了并发编程的复杂性。...
Java平台提供了丰富的并发工具,如ExecutorService、Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)等,这些工具帮助开发者有效地管理和控制并发任务。例如,ExecutorService允许创建...
Java并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...
- **java.util.concurrent**包提供了一系列并发工具类,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Phaser(屏障)等,它们可以帮助实现复杂的同步策略。 - **Semaphore**:...
最后,Java并发工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门闩)和Exchanger(交换器),提供了更高级的同步和协调机制,有助于解决复杂并发场景的问题。 通过阅读《JAVA...
5. **并发工具类**:Java并发包(java.util.concurrent)包含丰富的工具类,如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门锁)等,帮助开发者高效地处理并发问题。 **基于Http协议...
- **并发工具类**:Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器)的应用。 4. **IO/NIO**: - **传统IO**:流的概念,字节流与字符流,缓冲流的使用。 - **NIO**:非阻塞I/O,...
第二章至第四章可能会深入讨论Java并发工具,如Executor框架、Semaphore信号量、CountDownLatch计数器、CyclicBarrier回环栅栏、Future和Callable接口等。这些工具能够帮助开发者有效地控制线程执行、协调任务和管理...
此外,Java并发工具类如Semaphore(信号量)、CountDownLatch(计数器)和CyclicBarrier(循环栅栏)等可帮助开发者有效地管理并发资源。 2. 分布式集群: 分布式集群是将单一应用分散到多个节点上,以提升系统的...
此外,Java还提供了Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(计数器门锁)和Phaser(阶段器)等高级同步工具,以应对更复杂的并发场景。 线程的状态包括新建、就绪、运行、阻塞和终止,...
3. **并发工具类**:Java并发包(java.util.concurrent)提供了丰富的并发工具类,如Semaphore(信号量)、CyclicBarrier(循环栅栏)、CountDownLatch(计数器门锁)、Future和Callable接口等,它们在解决特定并发...
8. **并发工具类**:如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和 Phaser(阶段器)等,它们在多线程编程中提供了灵活的同步和协调机制。 9. **并发集合**:如ConcurrentHashMap...
3. **并发工具类**:如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)和Exchanger(交换器)等,这些都是Java并发库提供的重要工具,用于实现复杂的同步和协作机制。 4. **并发集合**...
2. CyclicBarrier:循环栅栏,允许一组线程等待彼此到达某个点后再一起继续执行。 3. Semaphore:信号量,用于控制对有限资源的访问权限,常用于限流和同步。 六、线程安全与内存模型 1. Java内存模型(JMM):定义...
4. **并发工具类**:学习Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(倒计时器)和Exchanger(交换器)等工具类,以及如何在实际项目中应用。 5. **线程池**:理解ExecutorService、...
6. **并发工具类**:介绍Java并发库(java.util.concurrent)中的各种工具类,如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)等,用于更高级的线程协调。 7. **实战案例**:可能包含...
2. **并发锁**:在高并发环境中,Java提供了更为高效的并发锁,如Semaphore(信号量)、CountDownLatch(计数器)和CyclicBarrier(回环栅栏)。这些工具允许精确控制线程的同步和通信,有助于优化多线程程序的性能...