源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java线程并发semaphore类示例

  • 时间:2021-01-16 09:57 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java线程并发semaphore类示例
[u]复制代码[/u] 代码如下:
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);  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部