场景:控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。
public class TestSemaphore {
public static void main(String[] args) {
// 线程池
ExecutorService exec = Executors.newCachedThreadPool();
// 只能5个线程同时访问
final Semaphore semp = new Semaphore(5);
// 模拟20个客户端访问
for (int index = 0; index < 20; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
// 获取允许
semp.acquire();
System.out.println("Accessing: " + NO);
Thread.sleep((long) (Math.random() * 10000));
// 访问完后,释放
semp.release();
} catch (InterruptedException e) {
}
}
};
exec.execute(run);
}
// 退出线程池
exec.shutdown();
}
}
分享到:
相关推荐
在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...
在JDK5中,多线程并发库引入了一系列新的特性,极大地增强了Java处理并发问题的能力。以下是关于这个主题的详细解释: 1. **线程**: - **线程与进程的关系**:进程是一个正在执行的程序实体,而线程是进程内部的...
在并发编程方面,JDK 5添加了java.util.concurrent包,包含了线程池、并发容器和同步工具类等高效并发工具。例如,ExecutorService和Future接口提供了异步执行任务的能力,而ConcurrentHashMap则是一种线程安全的...
《Guava-JDK5:Java开发者的高效工具库》 Guava是Google为Java平台推出的一个开源库,它集合了许多实用的功能,极大地提高了Java开发的效率。Guava-JDK5是Guava的一个版本,专为支持Java 5的环境而设计。这个版本...
JDK 8对并发库进行了优化,包括改进的Fork/Join框架、新的并发数据结构(如`Double-checked Locking`的替代品`AtomicReferenceFieldUpdater`)以及更好的垃圾收集器,如G1垃圾收集器。 ### 10. **模块系统(Project...
另外,增强了内存模型,提高了并发编程的效率和安全性。JEP 391引入了适应性垃圾收集器(ZGC)作为实验性功能,其目标是在大型堆上实现低延迟的垃圾回收。此外,JDK 17还增强了JShell(也称为REPL,读-评价-打印循环...
Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一套开发和运行Java应用程序所需的工具和库。本文将详细探讨JDK 1.6和JDK 1.8之间的主要差异,以及它们在开发过程中的应用。 JDK 1.6,也被称为Java...
本文将深入探讨JDK 1.4、JDK 1.5(也称为Java 5)和JDK 6这三个重要版本的关键特性。 **JDK 1.4** JDK 1.4是Java发展历程中的一个里程碑,发布于2002年。这个版本引入了许多关键的新特性,包括: 1. **异常链**:...
11. **并发改进**:JDK 8对并发库进行了优化,包括`ForkJoinPool`和`Parallel Streams`,提升了多线程环境下的性能。 12. **反射API的改进**:增加了`MethodHandle`和`MethodType`,提供了更底层的反射机制,增强了...
JDK8对并发库也进行了增强,如`ConcurrentHashMap`的改进,新增`AtomicIntegerArray`、`LongAdder`等原子类型,以及`ForkJoinPool`和`Parallel Streams`的引入,提高了多线程环境下的性能。 **9. Nashorn ...
7. 并发改进:Java 8对并发库进行了增强,比如Fork/Join框架和Parallel Streams,这些改进使得并行编程更加高效和简单。 总之,JDK 1.8,尤其是32位和64位的版本,对于Java开发者来说是一个重要的里程碑。它不仅...
9. **改进的并发库**:包括`Fork/Join框架`和`Parallel Streams`,这些改进提高了多线程编程的效率和可管理性。 10. **新的编译器和JVM优化**:JDK 8的Javac编译器和JVM进行了优化,提升了编译速度和运行时性能,...
张孝祥的Java多线程与并发库高级应用笔记涵盖了从传统线程技术到JDK1.5并发库的全面内容,不仅加深了对线程基本原理的认识,还介绍了现代Java并发编程的最佳实践。对于希望提升多线程编程技能的Java开发者来说,这是...
JDK 1.8对并发库进行了优化,如`ForkJoinPool`和`CompletableFuture`,提供了更好的并行计算支持。`ForkJoinPool`是基于工作窃取算法的多线程池,而`CompletableFuture`则支持异步编程和复杂的链式操作。 8. **新...
JDK 1.8对并发编程也进行了优化,如Fork/Join框架的改进,新的并发数据结构如ConcurrentHashMap的增强,以及ThreadLocalRandom的引入,都提升了多线程环境下的性能和易用性。 **8. 类型接口** 在JDK 1.8中,可以...
JDK 10改进了并发编程中的异常处理,当一个守护线程意外终止时,会自动释放它持有的锁,避免死锁的发生。 ### 4. 其他语言特性 - **封装IPv6地址的Inet6Address API**:提供更安全和高效的IPv6处理。 - **垃圾收集...
Java Development Kit(JDK)是Java编程语言的核心组件,它包含了一组开发和运行Java应用程序所需的工具和库。JDK 1.8是Java历史上的一个重要版本,它引入了许多新特性,增强了性能,并且对开发者提供了更多的便利。...
9. **并发更新集合**:并发集合库(如ConcurrentHashMap)在JDK 1.7中得到了增强,提供更好的并发性能和线程安全。 10. **新的日期和时间API**:Java 7引入了java.time包,提供了新的日期和时间API,取代了过时的...
JDK 1.8对并发库进行了优化,如Fork/Join框架的改进,以及ConcurrentHashMap的性能提升,提供了更好的并行计算能力。 **9. 其他改进** 包括新的类型推断、新的反射API、新的编译器优化等,都提升了开发效率和程序...
10. **内存模型改进**:JDK 11的内存模型进行了调整,确保了并发程序的行为更加一致和可预测。 解压"jdk-11.0.1.zip"后,你会得到一个包含多个目录和文件的结构,如`bin`(包含可执行文件)、`lib`(库文件)、`...