java线程并发semaphore类示例

 更新时间:2014年01月16日 09:21:47   作者:  
Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管理一个资源池的工具,可以看成是个通行证

复制代码 代码如下:

package com.yao;

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

/**
 * Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是:
 * Semaphore, CountDownLatch, CyclicBarrier和Exchanger.
 * 本例主要介绍Semaphore。
 * Semaphore是用来管理一个资源池的工具,可以看成是个通行证,
 * 线程要想从资源池拿到资源必须先拿到通行证,
 * 如果线程暂时拿不到通行证,线程就会被阻断进入等待状态。
 */
public class MySemaphore extends Thread {

 private int i;
 private Semaphore semaphore;

 public MySemaphore(int i,Semaphore semaphore){
  this.i = i;
  this.semaphore = semaphore;
 }

 public void run(){
  if(semaphore.availablePermits() > 0){
   System.out.println(""+i+"有空位 : ");
  }else{
   System.out.println(""+i+"等待,没有空位 ");
  }
  try {
   semaphore.acquire();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println(""+i+"获得空位");
  try {
   Thread.sleep((int)Math.random()*10000);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println(""+i+"使用完毕");
  semaphore.release();
 }
 public static void main(String[] args) {
  Semaphore semaphore = new Semaphore(2);
  ExecutorService service = Executors.newCachedThreadPool();
  for(int i = 0 ;i<10 ; i++){
   service.execute(new MySemaphore(i,semaphore));
  }
  service.shutdown();
  semaphore.acquireUninterruptibly(2);
  System.out.println("使用完毕,需要清扫了");
  semaphore.release(2);
 }

}

相关文章

  • 猜你不知道Spring Boot的几种部署方式(小结)

    猜你不知道Spring Boot的几种部署方式(小结)

    这篇文章主要介绍了猜你不知道Spring Boot的几种部署方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Kafka生产者和消费者高级用法及说明

    Kafka生产者和消费者高级用法及说明

    Kafka生产者和消费者高级用法包括事务支持、多线程处理和自定义序列化与反序列化,事务支持确保消息的原子性,多线程处理提高高吞吐量场景下的效率,自定义序列化和反序列化则增强了灵活性,适用于复杂数据结构
    2025-11-11
  • 详解JSON与 Java对象之间的转化

    详解JSON与 Java对象之间的转化

    在现在的日常开发中,不管前端还是后端,JSON 格式的数据是用得比较多的,甚至可以说无处不在。所以本文主要来讲讲JSON 格式的数据与 Java 对象之间的转化吧
    2023-03-03
  • SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密功能

    SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密功能

    在Spring Boot生态中,有一个非常厉害的开源框架:Apache ShardingSphere,它是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强,今天通过这篇文章,我们一起来了解一下如何在 Spring Boot 中快速实现数据的加解密功能
    2024-07-07
  • Java计时器工具StopWatch的具体使用

    Java计时器工具StopWatch的具体使用

    计时器在很多地方都可以用到,本文主要介绍了Java计时器工具StopWatch的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Java异常处理深入理解

    Java异常处理深入理解

    这篇文章主要介绍了java项目常用异常处理汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • Java并发编程Lock Condition和ReentrantLock基本原理

    Java并发编程Lock Condition和ReentrantLock基本原理

    这篇文章主要介绍了Java并发编程Lock Condition和ReentrantLock基本原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 解析java稀疏数组如何帮助我们节省内存提升性能

    解析java稀疏数组如何帮助我们节省内存提升性能

    这篇文章主要为大家介绍了java稀疏数组如何帮助我们节省内存提升性能解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • java实现字符串排列组合问题

    java实现字符串排列组合问题

    这篇文章主要为大家详细介绍了java实现字符串排列组合问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java 多线程的同步代码块详解

    Java 多线程的同步代码块详解

    这篇文章主要介绍了Java 多线程的同步代码块,使用synchronized关键字创建线程同步方法是实现线程同步的关键,需要的朋友可以参考下
    2021-10-10

最新评论