- 浏览: 746541 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
Countdown latches are single-use barriers that allow one or more threads to
wait for one or more other threads to do something. The sole constructor for
CountDownLatch takes an int that is the number of times the countDown method
must be invoked on the latch before all waiting threads are allowed to proceed.
import java.util.concurrent.CountDownLatch; class Driver { private static int N = 10; public static void main(String[] args) throws InterruptedException { CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(N); for (int i = 0; i < N; ++i) // create and start threads new Thread(new Worker(startSignal, doneSignal)).start(); doSomethingElse(); // don't let run yet startSignal.countDown(); // let all threads proceed doSomethingElse(); doneSignal.await(); // wait for all to finish System.out.println("Oh yeah! done signal finished."); } private static void doSomethingElse() { try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Worker implements Runnable { private final CountDownLatch startSignal; private final CountDownLatch doneSignal; Worker(CountDownLatch startSignal, CountDownLatch doneSignal) { this.startSignal = startSignal; this.doneSignal = doneSignal; } public void run() { try { startSignal.await(); doWork(); doneSignal.countDown(); } catch (InterruptedException ex) { } // return; } void doWork() { System.out.println("working..."); } }
另一例:
// Simple framework for timing concurrent execution public static long time(Executor executor, int concurrency, final Runnable action) throws InterruptedException { final CountDownLatch ready = new CountDownLatch(concurrency); final CountDownLatch start = new CountDownLatch(1); final CountDownLatch done = new CountDownLatch(concurrency); for (int i = 0; i < concurrency; i++) { executor.execute(new Runnable() { public void run() { ready.countDown(); // Tell timer we're ready try { start.await(); // Wait till peers are ready action.run(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { done.countDown(); // Tell timer we're done } } }); } ready.await(); // Wait for all workers to be ready long startNanos = System.nanoTime(); start.countDown(); // And they're off! done.await(); // Wait for all workers to finish return System.nanoTime() - startNanos; }
Note that the method uses three countdown latches. The first, ready, is used
by worker threads to tell the timer thread when they’re ready. The worker threads
then wait on the second latch, which is start. When the last worker thread
invokes ready.countDown, the timer thread records the start time and invokes
start.countDown, allowing all of the worker threads to proceed. Then the timer
thread waits on the third latch, done, until the last of the worker threads finishes
running the action and calls done.countDown. As soon as this happens, the timer
thread awakens and records the end time.
发表评论
-
关于方法访问控制符protected
2012-11-29 10:38 1261http://bbs.csdn.net/topics/3902 ... -
一个基本问题关于引用的
2012-05-15 10:20 1126问: int a = 1; Integer b = new ... -
我對面向對象和過程的理解。
2012-05-02 08:30 1065我的一些理解。 面向过程,是对客观现象的描述,感觉是有一个上 ... -
stack and heap
2012-01-13 23:17 1050我觉得是根据应用方式 和本身特性 才将内存分区的,目的是提 ... -
program experience conclusion
2011-07-11 15:35 10621. check parameters for validit ... -
PreparedStatement's possible designated parameter
2011-04-29 13:45 985though it's nearly impossible t ... -
clean Log4j
2011-04-12 11:19 1064import org.apache.log4j.BasicCo ... -
about abstract class
2011-04-02 10:34 866yes, we do know abstract class ... -
cvs operations on linux
2011-03-25 09:40 1009http://www.linuxhowtos.org/Syst ... -
regex to exchange two parts
2011-03-24 17:09 1087public class Test { public ... -
About the database locking
2011-03-09 11:02 962http://en.wikipedia.org/wiki/Lo ... -
how to send soap message in java
2011-03-08 10:29 1894import java.io.BufferedReader; ... -
About ShutDownDemo
2011-03-07 15:02 980public class ShutdownDemo { p ... -
How do you know if an explicit object casting is needed
2011-02-24 16:33 1186通俗来讲,不可能将一只是猫的动物强转为狗 再说Graphic ... -
有关MimeUtility
2011-02-24 13:11 3360import java.io.UnsupportedEncod ... -
C#连接sql server 2008的一件2事
2011-02-24 09:01 2151once upon a time, i came upon o ... -
Shadowing, Overriding, Hiding and Obscuring
2011-02-22 15:15 1163当子类属性与父类属性重叠时 这种叫法上是shadowi ... -
JAXP usage
2011-02-16 16:07 1096import java.io.ByteArrayInputSt ... -
运行一个类,如果classpath中路径带空格就加双引号
2011-02-11 11:25 2805注意是这样加: java -cp .;"d:\my ... -
关于ClassPath中的current directory
2011-01-28 16:40 1152Given: 1. package com.company. ...
相关推荐
4. **条件变量(Condition)**:`java.util.concurrent.locks.Condition`接口提供了一种基于条件的等待机制,可以替代`wait()`、`notify()`和`notifyAll()`,使得线程等待满足特定条件后再继续执行。 5. **信号量...
- **Phaser**:Java 7引入的同步工具,可以替代CountDownLatch和CyclicBarrier。 5. **线程优先级**: Java中线程有10个优先级,默认优先级是5(NORM_PRIORITY)。优先级高的线程更有可能获取CPU资源,但并不保证...
2. **Phaser**:Java 7引入的新工具,可替代CountDownLatch和CyclicBarrier,具有更灵活的分阶段并发控制。 六、线程池 Java的 **Executor框架** 提供了线程池服务,通过ThreadPoolExecutor可以定制线程池的行为,...
5. **wait()与notify()**:这两个方法在`Object`类中,用于线程间的通信。线程调用wait()会释放锁并进入等待状态,直到其他线程调用notify()或notifyAll()唤醒。 6. **ThreadLocal**:每个线程都有自己的...
- `Lock`和`Condition`:Java 5引入的`java.util.concurrent.locks`包提供了更强大的锁机制,如`ReentrantLock`,以及可以替代`wait()`/`notify()`的`Condition`接口。 3. **线程状态与生命周期** - 新建(New)...
`Lock`接口和其实现如`ReentrantLock`允许更细粒度的锁定控制,`Condition`则提供了更强大的条件等待和唤醒机制,而`wait`、`notify`和`notifyAll`则是在`Object`类中定义的原生同步方法,用于线程间的等待和唤醒。...
`Condition` 是与 `ReentrantLock` 配合使用的条件对象,可以替代传统的 `wait()` 和 `notify()` 方法实现更加灵活的线程间通信。 - **AtomicInteger、ConcurrentHashMap、ArrayBlockingQueue**:这些类是 Java 并...
9. **线程通信**:`wait()`、`notify()`和`notifyAll()`方法是Object类的方法,用于线程间通信,通常配合`synchronized`使用。`wait()`使当前线程等待,`notify()`或`notifyAll()`唤醒等待的线程。 10. **线程池**...
线程的中断、互斥同步可以通过中断机制、wait/notify机制和`synchronized`关键字实现,线程间的协作可以使用Condition、CountDownLatch、CyclicBarrier等工具类。 在Java中,除了`synchronized`,还有更高级的锁...
书中会详细介绍线程的生命周期、同步机制(如synchronized关键字、wait/notify、Lock接口)以及并发工具类(如Semaphore、CountDownLatch等)的使用。 其次,Java的反射机制也是高级特性之一。通过反射,程序可以在...
- **条件变量(Condition)**:Lock接口提供了一个Condition接口,可以创建多个条件变量,比`synchronized`的wait/notify机制更灵活。 3. 其他同步工具类: - **Semaphore**:信号量,可以控制同时访问特定资源的...
4. **wait/notify机制**:使用while循环配合wait(),避免死锁和误唤醒。 **对象的锁机制:** 每个Java对象都有一个内置锁,可以通过同步方法或同步块获取。锁是可重入的,意味着一个线程可以多次获得同一锁。此外,...
- Java中的每个对象都可以作为监视器,线程通过调用对象的`wait()`、`notify()`或`notifyAll()`方法来协作。这些方法必须在同步块或同步方法中使用,否则会抛出`IllegalMonitorStateException`。 4. **死锁** - ...
理解和使用synchronized关键字、wait()、notify()方法,以及并发工具类如Semaphore、CountDownLatch、CyclicBarrier,可以提高程序的并发性能和正确性。 3. **IO流**:Java IO流分为字节流和字符流,包括输入流和...
- **wait/notify机制**:线程间的通信,等待特定条件满足后继续执行。 3. **并发模式**: - **生产者消费者模型**:利用队列实现数据的生产和消费,避免阻塞。 - **读写者模型**:允许多个读操作同时进行,但写...
- **等待/通知机制:** `wait()`和`notify()`方法可用于实现线程间的等待和唤醒。 - **`join`方法:** 一个线程可以调用另一个线程的`join()`方法来等待该线程的结束。 - **屏障(Barriers):** `CyclicBarrier`和`...
5. **多线程**:线程创建、同步机制(synchronized关键字、wait()、notify())和并发工具类(如Semaphore、CountDownLatch)。 6. **设计模式**:单例模式、工厂模式、装饰器模式等经典设计模式的实现和应用。 在...
- **wait(), notify(), notifyAll()**:这三个方法用于线程间的通信,它们只能在synchronized环境中使用。 4. **线程的优先级与调度** - **优先级**:Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_...
- 尽量避免使用wait()和notify(),优先考虑使用并发工具类如Semaphore、CountDownLatch等。 7. **性能优化**: - 避免在循环体内进行不必要的计算。 - 使用StringBuilder而非+操作符拼接字符串。 - 合理使用...
线程可以通过sleep()方法进入阻塞状态,通过join()方法让主线程等待子线程完成,通过wait()和notify()或notifyAll()方法进行线程间的同步与通信。 Java提供了多种线程控制机制,如synchronized关键字用于实现互斥...