作者:青春快乐1 | 来源:互联网 | 2023-10-11 10:10
Semaphore我们叫信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。
Semaphore默认为非公平的阻塞队列,也可以设置为公平锁机制。
Semaphore semaphore1 = new Semaphore(1);Semaphore semaphore2 = new Semaphore(1, true);
方法说明:
acquire()&#xff1a;当前线程会尝试去同步队列获取一个令牌&#xff0c;获取令牌的过程也就是使用原子的操作去修改同步队列的state ,获取一个令牌则修改为state&#61;state-1&#xff0c;state<0获取失败&#xff0c;state>0获取成功。
release()&#xff1a;释放令牌&#xff0c;释放后state&#43;1&#xff0c;并且唤醒所有阻塞线程重新获取令牌。
availablePermits()&#xff1a;获取当前还存在的令牌数量。
代码说明&#xff1a;
public class Test {public static void main(String[] args) {Semaphore semaphore &#61; new Semaphore(2);for (int a &#61; 0; a < 5; a&#43;&#43;) {new Thread(() -> {try {semaphore.acquire();System.out.println(Thread.currentThread().getName() &#43; "成功进入停车场");TimeUnit.SECONDS.sleep(new Random().nextInt(5));System.out.println(Thread.currentThread().getName() &#43; "离开停车场");} catch (Exception e) {e.printStackTrace();} finally {semaphore.release();}}, a &#43; "-号车").start();}}
}
效果&#xff1a;