手机
当前位置:查字典教程网 >编程开发 >Java >java线程并发semaphore类示例
java线程并发semaphore类示例
摘要:复制代码代码如下:packagecom.yao;importjava.util.concurrent.ExecutorService;imp...

复制代码 代码如下:

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

}

}

【java线程并发semaphore类示例】相关文章:

java多线程和并发包入门示例

使用java实现http多线程断点下载文件(二)

java数字图像处理基础使用imageio写图像文件示例

java网络编程中向指定URL发送GET POST请求示例

java多线程复制文件的实例代码

java线程之用Thread类创建线程的方法

java中通用的线程池实例代码

java调用c程序通信示例代码

Java线程优先级示例代码

java使用rmi传输大文件示例分享

精品推荐
分类导航