semaphone是能够复用的,当信号量不为0的时候,其他线程可以继续使用
默认非公平锁
semaphone测试
package com.example.demo.Test;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
/**
* 关于SemaPhone的测试类
* 通过信号量进行操作
*/
public class SemaphoneTest {
public static void main(String[] args) {
//只有4个资源可以使用
Semaphore semaphore = new Semaphore(4);
for(int i = 0 ; i < 10 ; i++){
new Thread(()->{
try {
//获取资源
semaphore.acquire();
System.out.println(Thread.currentThread().getName()+"获取资源");
try {TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
System.out.println(Thread.currentThread().getName()+"准备释放资源");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放资源
semaphore.release();
}
},String.valueOf(i)).start();
}
}
}