Java假设有银行有3个窗口,用多线程模拟 实现3个窗口按照1到10的顺序川1~10号的号码,3个窗口叫的10个号没有选漏,并且不能出现叫了超出这10个的号。某次运行结果如下所示,自行编写模拟叫号功能及测试程厅测试结果。 运行结果如下:(线程运行结果有随机性,不一定和下面一致,但是输出的号码不能有相同或超出范围)
时间: 2024-02-16 16:05:20 浏览: 40
java 银行系统多线程
4星 · 用户满意度95%
好的,我来解答你的问题。
这是一个经典的多线程模拟问题。我们可以创建三个线程分别表示三个窗口,每个窗口轮流叫号,同时需要保证叫的号码不重复,且不超过1到10的范围。
下面是一个可能的实现方式:
```
public class BankSimulation {
private static int currentNumber = 1;
private static final int MAX_NUMBER = 10;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread window1 = new Thread(() -> {
while (true) {
synchronized (lock) {
if (currentNumber > MAX_NUMBER) {
break;
}
System.out.println("Window 1: " + currentNumber++);
}
}
});
Thread window2 = new Thread(() -> {
while (true) {
synchronized (lock) {
if (currentNumber > MAX_NUMBER) {
break;
}
System.out.println("Window 2: " + currentNumber++);
}
}
});
Thread window3 = new Thread(() -> {
while (true) {
synchronized (lock) {
if (currentNumber > MAX_NUMBER) {
break;
}
System.out.println("Window 3: " + currentNumber++);
}
}
});
window1.start();
window2.start();
window3.start();
}
}
```
这个程序中,我们使用了一个静态变量 `currentNumber` 来表示当前叫到的号码。每个窗口都是一个独立的线程,它们会不断循环叫号,直到叫到最后一个号码为止。
在每个线程中,我们使用了一个 `synchronized` 块来保证线程安全。这个块中,我们首先判断当前号码是否超过了范围,如果超过了就退出循环。否则,就输出当前号码,并将号码加一。
这样,就可以保证三个窗口轮流叫号,且不会重复叫号或者叫出范围外的号码。
希望能够对你有所帮助。
阅读全文