`
jokermanager
  • 浏览: 143711 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDK5新特性--java.util.concurrent Semaphore(8)

阅读更多

操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。

Semaphore维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表。另外重入锁ReentrantLock也可以实现该功能,但实现上要负责些,代码也要复杂些。

下面的Demo中申明了一个只有5个许可的Semaphore,而有20个线程要访问这个资源,通过acquire()和release()获取和释放访问许可。

package  concurrent;

import  java.util.concurrent.ExecutorService;
import  java.util.concurrent.Executors;
import  java.util.concurrent.Semaphore;

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 () ;
   }
}

运行结果:
Accessing: 0
Accessing: 1
Accessing: 2
Accessing: 3
Accessing: 4
Accessing: 5
Accessing: 6
Accessing: 7
Accessing: 8
Accessing: 9
Accessing: 10
Accessing: 11
Accessing: 12
Accessing: 13
Accessing: 14
Accessing: 15
Accessing: 16
Accessing: 17
Accessing: 18
Accessing: 19

分享到:
评论
2 楼 uuid198909 2011-07-26  
代码看着是比较………………
1 楼 heipark 2011-07-22  
兄弟,咱这代码纠结了点....

相关推荐

    jdk-6u45-linux-x64.bin

    5. **并发工具类库**:Java并发工具包(java.util.concurrent)在1.6版本中得到加强,增加了如`CountDownLatch`、`CyclicBarrier`、`Semaphore`等同步工具,便于多线程编程。 6. **XPath和XML处理**:JDK 1.6改进了...

    backport-util-concurrent-3.1.jar

    backport-util-concurrent-3.1.jar是一个Java库,它提供了一些并发工具类,用于简化多线程编程。这个库包含了许多实用的工具类,如`FutureTask`、`CountDownLatch`、`Semaphore`等,这些工具类可以帮助开发者更好地...

    JDK_API1.6-18-19版本.rar

    此外,1.6版本还增强了并发处理能力,引入了并发工具类(java.util.concurrent),如Semaphore、CountDownLatch等,为多线程编程提供了便利。 接下来是JDK API 1.8,这个版本引入了Lambda表达式和函数式接口,极大...

    jdk----5windowsx64.zip

    9. **并发编程改进(Concurrency Enhancements)**:引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具类,如`Executor`框架、`Future`接口以及`Semaphore`、`CyclicBarrier`等同步工具。...

    参考文档-jdk接口文档.7z

    `java.lang.Thread`类和`java.util.concurrent`包提供了线程创建、同步和并发控制的工具,如`synchronized`关键字、`Semaphore`、`ExecutorService`等。 ### 七、模块系统 Java 9引入了模块系统,通过`java.module...

    backport-util-concurrent_java_backport_源码.zip

    这个库使得开发者在不支持Java 5新特性的环境中也能使用高级的并发控制机制,极大地提升了多线程编程的效率和可靠性。本文将深入探讨backport-util-concurrent的源码,揭示其核心设计理念与实现原理。 首先,...

    JDK1.6 API帮助文档.rar

    - **java.concurrent**:在JDK1.5引入,提供了并发控制、线程池、同步容器和并发集合等高级并发工具,如ExecutorService、Semaphore、Future、BlockingQueue等。 4. **反射与注解** - **java.lang.reflect**:...

    JDK6API中文参考

    - **java.util.concurrent** 包:提供了高级并发工具,如ExecutorService、Semaphore、CountDownLatch等,便于进行并发编程。 4. **网络编程** - **java.net** 包:包含了Socket、ServerSocket、URL等类,支持TCP...

    jdk 1.6 API HTML Chinese

    - **java.util.concurrent**:提供高级并发工具类,如ExecutorService、Future、Semaphore等,方便多线程编程。 - **java.lang.Thread**:管理和控制线程的基本类,包括线程的创建、启动、同步和中断。 4. **反射...

    A-JUC-JVM-Java并发知识..pdf

    Java并发编程包(java.util.concurrent,简称JUC)封装了大量用于高并发编程的工具类和接口,其中涉及了线程池、阻塞队列、同步器、原子操作类等。在并发环境下,可以有效降低线程创建和管理的复杂性。 #### Java...

    java11英文api文档,jdk-11.0.5_doc-all.zip

    Java 11是Java开发平台的一个重要版本,它在2018年9月发布,引入了许多新特性和改进。这个“jdk-11.0.5_doc-all.zip”压缩包包含了Java 11的完整英文API文档,是开发者理解和使用Java 11 API的关键资源。API...

    java api文档jdk-6u30-apidocs

    `Thread`类允许创建和管理线程,而`java.util.concurrent`包提供了一套高效的并发工具,如`ExecutorService`、`Semaphore`和`CountDownLatch`,有助于简化多线程环境下的同步和协调。 4. **网络编程**:`java.net`...

    jdk6-api-zh_CN(java API 中文文档)

    5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的工具,如`Runnable`、`ExecutorService`、`Semaphore`等。 6. **异常处理**:`java.lang.Throwable`和其子类如`Exception`、`Error...

    jdk-6u45-linux-x64

    3. **并发工具包(Concurrent Package)**: JDK 1.6对并发编程的支持进一步增强,提供了丰富的并发工具类,如`java.util.concurrent`包下的`ExecutorService`、`Future`、`Semaphore`等,方便开发者进行高效的多线程...

    JDK1.6 API帮助文档

    - **java.util.concurrent**: 提供了高级并发工具,如ExecutorService、Future、Semaphore等,简化了多线程编程。 4. **I/O与NIO** - **传统I/O**: 基于流的I/O模型,如FileInputStream和FileOutputStream。 - *...

    JDK1.8 API 中文 百度翻译版 java帮助文档

    `CompletableFuture`是JDK1.8引入的新特性,用于处理异步计算,可以组合多个异步任务并处理结果。 ### 六、反射API `java.lang.reflect`包提供了反射API,允许程序在运行时动态访问和修改类、接口、字段和方法。...

    Java jdk api 1.8_google.CHM JDK API 1.8谷歌翻译中文版在线参考手册

    首先,Java JDK 1.8是Java编程语言的一个关键版本,引入了许多新的特性和改进。其中最著名的当属Lambda表达式,这是一种简洁的函数式编程语法,使得处理集合数据变得更加高效。另外,Java 8还引入了Stream API,它...

    JDK concurrent

    标签 "源码" 提示我们可能会涉及Java并发库的底层实现,例如分析`java.util.concurrent`包中的类,如`ExecutorService`, `Semaphore`, `BlockingQueue`, `CountDownLatch`等的源代码。这些类在处理线程间通信、任务...

    JDK1.5-1.6-1.7之新特性总结-1

    JDK 1.5增加了大量并发编程的工具类,如`java.util.concurrent`包下的`ExecutorService`、`Future`、`Semaphore`等,它们提供了更高效和安全的多线程处理方式。 **10. 遍历Map的键值对(For-Each Loop over Maps)*...

    JDK 5.0.zip

    7. **内建的并发工具类**:JDK 5.0引入了`java.util.concurrent`包,包含了许多线程安全的数据结构和并发工具,如`ExecutorService`、`Semaphore`、`Future`等,极大地简化了多线程编程。 8. **NIO.2(New I/O API...

Global site tag (gtag.js) - Google Analytics