JAVA API (CountDownLatch)
class Driver { // ...
void main() 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
}
}
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() { ... }
}
class Driver2 { // ...
void main() throws InterruptedException {
CountDownLatch doneSignal = new CountDownLatch(N);
Executor e = ...
for (int i = 0; i < N; ++i) // create and start threads
e.execute(new WorkerRunnable(doneSignal, i));
doneSignal.await(); // wait for all to finish
}
}
class WorkerRunnable implements Runnable {
private final CountDownLatch doneSignal;
private final int i;
WorkerRunnable(CountDownLatch doneSignal, int i) {
this.doneSignal = doneSignal;
this.i = i;
}
public void run() {
try {
doWork(i);
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { ... }
}
countDown方法是递减
await方法是等到计数器为零才启动线程
分享到:
相关推荐
总结来说,本资源包提供的"多线程入门资料"涵盖了多线程的基本概念、实现方式、线程同步与通信、并发问题及其解决方案,以及分布式锁的原理与实现,是学习Java多线程和分布式系统的好助手。通过深入学习和实践,...
**并发包JUC(Java Util Concurrency)**:JUC是Java提供的高级并发工具包,包含如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)、Exchanger(交换器)等工具类,它们简化了多线程编程...
5. **实用工具类**:库中还包括了一些实用工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们在多线程协调和同步方面提供了强大的支持,可以帮助开发者构建复杂的并发场景。 在实际项目中,要充分利用...
- **并发工具类**:熟悉ConcurrentHashMap、CountDownLatch、CyclicBarrier、Semaphore等并发工具的使用。 5. **IO流** - **流的分类**:了解字节流和字符流,理解节点流和处理流的区别。 - **文件操作**:熟悉...
- `Semaphore`和`CountDownLatch`:用于线程同步和计数。 - `CyclicBarrier`和`Phaser`:协调多个线程之间的协作。 12. **I/O新特性** - NIO(非阻塞I/O):提供了选择器(Selector)和通道(Channel),允许单...
此外,`CountDownLatch`的使用也可能是问题的一部分,如果在多线程场景中,没有在finally块中正确调用`countDown()`方法,可能会导致线程等待时间过长,造成内存锁死,尤其是在3秒的超时设定下,如果未正确释放,...
`Runnable`接口和`Thread`类可以创建并运行线程,而并发包中的工具类如`ExecutorService`、`Semaphore`、`CountDownLatch`等则有助于管理和控制线程。 5. **I/O流**:`java.io`包是Java输入/输出系统的基础,包括了...
这份"COREJAVA笔记"是全面学习和复习Java核心技术的好助手,它可以帮助读者深入理解Java语言的各个方面,提升编程技能,为实际项目开发打下坚实基础。无论你是刚接触Java的新手,还是寻求进一步提升的开发者,这份...
还包括synchronized关键字、volatile变量、线程安全的容器类、线程池(ExecutorService)以及并发工具类如Semaphore、CountDownLatch等,帮助开发者进行高效的并发编程。 五、网络编程 Java的java.net包提供了...
10. **并发工具类**:java.util.concurrent包提供了Semaphore、CyclicBarrier、CountDownLatch和ConcurrentHashMap等工具,用于高效、安全的并发编程。 在使用Java API文档中文版时,开发者可以根据类名、方法名或...
JDK的并发编程库(java.util.concurrent)提供了高效线程同步和协作的工具,如Semaphore、CountDownLatch、CyclicBarrier等,这些工具能够帮助我们编写出高效的多线程程序。此外,JDK还引入了Fork/Join框架和Stream ...
理解线程同步机制(如synchronized关键字,wait()和notify()方法)以及并发工具类(如ExecutorService,Semaphore,CountDownLatch)是编写高并发程序的基础。 7. **反射**:反射机制允许程序在运行时动态地获取类...
5. **多线程**:Java提供了丰富的多线程支持,面试中可能涉及线程的创建、同步机制(synchronized、Lock)、死锁、线程池以及并发工具类(ExecutorService、CountDownLatch、CyclicBarrier等)。 6. **JVM**:深入...
3. **并发编程**:线程的创建与管理、锁机制(synchronized、Lock)、并发容器(如ConcurrentHashMap、CountDownLatch、CyclicBarrier)以及并发工具类。 4. **Spring框架**:IoC容器、AOP代理、事务管理、Spring ...
8. **多线程**:线程的创建(通过Thread类或实现Runnable接口)、线程同步(synchronized关键字、wait()、notify()和notifyAll()方法)、线程池的使用(ExecutorService、ThreadPoolExecutor等)。 9. **反射机制**...
9. **并发工具类**:如`ConcurrencyUtils`,包含线程安全的数据结构和同步工具,如`CountDownLatch`用于线程间的等待,`Semaphore`可以控制并发访问资源的数量。 10. **XML处理工具类**:如`XmlUtils`,提供XML的...
Java面试是每位Java开发者职业生涯中的重要关卡,它考察了候选人的基础知识、编程能力、问题解决技巧以及对特定框架和...这份资料将是你准备面试的得力助手,确保你在关键时刻能够如虎添翼,展现出专业且全面的技能。
CountDownLatch则是一种同步辅助类,用于协调多个线程的执行。 四、I/O操作优化 Guava的IO模块提供了流式处理、读写缓冲和文件系统操作的优化工具。例如,CharStreams和ByteStreams可以分别用于字符和字节流的处理...
这个Java API的帮助文档不仅包含上述内容,还有更多关于异常处理、国际化、注解、并发工具类、GUI编程等方面的详细信息,是开发者日常编码、学习和解决问题的得力助手。通过深入学习和理解这些API,开发者能够更好地...
Java 7 API CHM版本是Java开发者的重要参考资料,它...它不仅是学习和调试Java 7代码的宝贵资源,也是日常开发工作中的得力助手。通过深入理解这些API,开发者能够更好地利用Java 7的功能,编写出高效、可靠的代码。