java多线程中的信号量是保证同一时间内最大的访问数量(线程)。
例子:
public class MySemaphore {
private static final Semaphore semaphore = new Semaphore(2);//运行同时拥有信号量的现场数
public static class SThread1 extends Thread{
public int cnt ;
public SThread1(int cnt){
this.cnt = cnt;
}
public void run(){
System.out.println(cnt+"thread1 start");
try {
System.out.println(cnt+"thread1 尝试获取信号量");
semaphore.acquire();
System.out.println(cnt+"thread1 信号量获取成功,休息5s");
Thread.sleep(5000);
System.out.println(cnt+"thread1 运行完毕,释放信号量");
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
semaphore.release();
}
}
}
public static void main(String[]args){
SThread1 thread1 = new SThread1(1);
SThread1 thread2 = new SThread1(2);
SThread1 thread3 = new SThread1(3);
thread1.start();
thread2.start();
thread3.start();
}
}