在操作系统中也经常出现信号量这一概念
Semaphore是并发编程中一个重要的概念/组件
准确来说,Semaphore是一个计数器(变量),描述了”可用资源的个数“,描述的是,当前线程是否有”临界资源可用“
临界资源表示,多个线程/进程等并发执行的实体可以公共使用到的资源(多个线程修改同一个变量,这个变量可以认为是临界资源)
package 信号量semaphore;
import java.util.concurrent.Semaphore;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wuyulin
* Date: 2023-08-04
* Time: 16:32
*/
//Semaphore是并发编程中一个重要的概念/组件
//准确来说Semaphore是一个计数器,描述了可用资源的个数
//描述了当前这个线程是否有临界资源可以使用
//临界资源,多个线程/进程等并发执行的实体可以公共使用到的资源(多个线程可以修改同一个变量,这个变量就可以认为是临界资源)
public class Demo1 {
public static void main(String[] args) throws InterruptedException {
Semaphore semaphore=new Semaphore(4); //参数表示初始可用资源的个数
semaphore.acquire();
System.out.println("获取资源");
semaphore.acquire();
System.out.println("获取资源");
semaphore.acquire();
System.out.println("获取资源");
semaphore.acquire();
System.out.println("获取资源");
semaphore.release();
System.out.println("释放资源");
semaphore.acquire();
System.out.println("获取资源");
//一个就4个可用资源,在获取完了以后,再次进行获取要进入阻塞等待,等待资源被释放后才能获取
semaphore.acquire();
System.out.println("获取资源");
}
}
1.Semaphore的使用并不困难,实例化Semaphore对象中写入的参数表示初始可用资源的个数
2.调用acquire方法来获取资源,此时Semaphore中用于计数的属性就减一
3.调用release方法释放资源,此时Semaphore中用于计数的属性就加一
4.当Semaphore中用于计数的属性为0表示没有资源可以利用,此时再调用acquire方法来获取资源,就会进入阻塞等待,直到有资源了以后再去获取资源继续向下执行