java用信号量写理发师_课内资源 - 基于Java实现的生产者与消费者问题、读者写者问题、哲学家进餐问题、理发师睡觉问题、医生看病问题...
时间: 2023-09-20 13:02:57 浏览: 83
好的,关于使用信号量实现理发师问题,你可以参考以下步骤:
1. 定义信号量
使用Java提供的Semaphore类定义两个信号量,一个表示等待理发的顾客数量,一个表示理发师是否忙碌:
```java
Semaphore customers = new Semaphore(0);
Semaphore barber = new Semaphore(0);
```
2. 定义线程
定义两个线程,一个代表理发师,一个代表顾客:
```java
class Barber extends Thread {
public void run() {
while (true) {
try {
// 等待顾客到来
customers.acquire();
// 开始理发
System.out.println("Barber is cutting hair");
sleep(3000);
// 理发完成
barber.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Customer extends Thread {
public void run() {
try {
// 到理发店等待
System.out.println("Customer is waiting");
customers.release();
// 等待理发师理发
barber.acquire();
// 理发完成
System.out.println("Customer is done with hair cut");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
3. 启动线程
在main函数中创建理发师和顾客线程,并启动:
```java
public static void main(String[] args) {
Barber barber = new Barber();
Customer customer1 = new Customer();
Customer customer2 = new Customer();
Customer customer3 = new Customer();
barber.start();
customer1.start();
customer2.start();
customer3.start();
}
```
这样就完成了使用信号量实现理发师问题的编写。在这个程序中,顾客线程等待理发师线程,而理发师线程等待顾客线程。通过信号量的机制,实现两个线程之间的同步。
阅读全文