模拟叫号看病多线程Java
在医院看病的过程中,通常需要先进行挂号,然后等待医生叫号,最后才能接受治疗。为了更好地模拟这一过程,我们可以使用多线程来实现一个叫号系统。
多线程原理
多线程是指在同一时间内,计算机的CPU可以同时处理多个线程(线程是程序执行的最小单位)。在Java中,可以通过实现Runnable接口或继承Thread类来创建多线程程序。多线程可以提高程序的效率,使得程序可以同时执行多个任务。
程序设计
我们将设计一个模拟叫号看病的程序,包括挂号系统、候诊区和医生叫号。挂号系统负责生成病人号码,候诊区接收病人号码并等待医生叫号,医生叫号负责从候诊区中取出病人号码进行治疗。
类图
使用Mermaid语法绘制类图如下:
classDiagram
class Hospital {
-Doctor doctor
-Registration registration
-WaitingRoom waitingRoom
+void start()
}
class Doctor {
-WaitingRoom waitingRoom
+void callPatient()
}
class Registration {
+int generateNumber()
}
class WaitingRoom {
-Queue<Integer> queue
+void addPatient(int number)
+int getNextPatient()
}
Hospital --> Doctor
Hospital --> Registration
Hospital --> WaitingRoom
Doctor --> WaitingRoom
代码实现
Hospital类
public class Hospital {
private Doctor doctor;
private Registration registration;
private WaitingRoom waitingRoom;
public Hospital() {
this.doctor = new Doctor();
this.registration = new Registration();
this.waitingRoom = new WaitingRoom();
}
public void start() {
int patientNumber = registration.generateNumber();
waitingRoom.addPatient(patientNumber);
doctor.callPatient();
}
public static void main(String[] args) {
Hospital hospital = new Hospital();
hospital.start();
}
}
Doctor类
public class Doctor {
private WaitingRoom waitingRoom;
public Doctor() {
this.waitingRoom = new WaitingRoom();
}
public void callPatient() {
int patientNumber = waitingRoom.getNextPatient();
System.out.println("Doctor is calling patient number: " + patientNumber);
}
}
Registration类
import java.util.concurrent.atomic.AtomicInteger;
public class Registration {
private AtomicInteger atomicInteger;
public Registration() {
this.atomicInteger = new AtomicInteger(1);
}
public int generateNumber() {
return atomicInteger.getAndIncrement();
}
}
WaitingRoom类
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
public class WaitingRoom {
private Queue<Integer> queue;
public WaitingRoom() {
this.queue = new ArrayBlockingQueue<>(10);
}
public void addPatient(int number) {
queue.add(number);
System.out.println("Patient number " + number + " is waiting in the waiting room.");
}
public int getNextPatient() {
return queue.poll();
}
}
运行效果
运行程序后,可以看到挂号系统生成病人号码并加入候诊区,医生叫号后从候诊区取出病人号码,模拟了实际看病的流程。
通过本文的介绍,希望读者对多线程Java编程有更深入的了解,并能够运用多线程技术解决实际问题。多线程可以提高程序的效率,实现更复杂的功能,是Java编程中的重要知识点。