JUC练习7——信号量semaphore
1,信号量是什么
用于表明可用的互斥资源个数,由此作为标志,使得多个进程互斥的使用互斥资源
2,信号量的应用场景
多个进程需要互斥的访问少量资源
3,代码示例
import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class JucTest7 { public static void main(String[] args) { /** * 信号量Semaphore的简单使用 * 模拟6辆车来争抢3个停车位的事件(多个进程互斥访问有限的资源) * 进程尝试获取position的时候,如果position没有了,就等待。 * 一旦进程释放了position就会唤醒正在等待的进程去获取position */ Semaphore position = new Semaphore(3); for (int i=1;i<=6;i++) { new Thread(()-> { try { position.acquire();//获取车位 System.out.println(Thread.currentThread().getName()+"获取到车位"); TimeUnit.SECONDS.sleep(2); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(Thread.currentThread().getName()+"释放车位"); position.release(); } },"A"+i).start(); } } }