java实现设置生成计算机和搬运计算机类,生产一台搬走一台,如果没有等待生成,如果生成等待搬运,计算2分钟生成了多少台计算机
时间: 2024-01-03 11:05:20 浏览: 27
下面是一个简单的Java程序实现设置生成计算机和搬运计算机类,生产一台搬走一台,如果没有等待生成,如果生成等待搬运,并计算2分钟生成了多少台计算机:
```java
public class Computer {
private int id;
public Computer(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
public class Producer implements Runnable {
private List<Computer> computers;
private int maxCount;
public Producer(List<Computer> computers, int maxCount) {
this.computers = computers;
this.maxCount = maxCount;
}
public void run() {
int count = 0;
while (true) {
synchronized (computers) {
if (computers.size() >= maxCount) {
try {
computers.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Computer computer = new Computer(count++);
computers.add(computer);
computers.notifyAll();
System.out.println("Producer produced computer " + computer.getId());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Consumer implements Runnable {
private List<Computer> computers;
public Consumer(List<Computer> computers) {
this.computers = computers;
}
public void run() {
while (true) {
synchronized (computers) {
if (computers.isEmpty()) {
try {
computers.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Computer computer = computers.remove(0);
computers.notifyAll();
System.out.println("Consumer consumed computer " + computer.getId());
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
List<Computer> computers = new ArrayList<>();
int maxCount = 10;
Producer producer = new Producer(computers, maxCount);
Consumer consumer = new Consumer(computers);
Thread producerThread = new Thread(producer);
Thread consumerThread = new Thread(consumer);
producerThread.start();
consumerThread.start();
try {
Thread.sleep(120000);
} catch (InterruptedException e) {
e.printStackTrace();
}
producerThread.interrupt();
consumerThread.interrupt();
System.out.println("Produced " + producer.getCount() + " computers in 2 minutes.");
}
}
```
这个程序中,Producer类和Consumer类分别表示生成计算机和搬运计算机的线程。它们共享一个List对象,表示仓库中的计算机。Producer线程在计算机仓库不满时生成计算机,并将其放入仓库中。如果仓库已满,则等待Consumer线程将计算机取走。Consumer线程在计算机仓库不空时从仓库中取出计算机。如果仓库为空,则等待Producer线程生成计算机。程序运行时,通过创建一个Producer线程和一个Consumer线程,并让它们分别执行生产和消费操作,来实现计算机的生产和搬运。
程序最后会运行2分钟,然后中断Producer线程和Consumer线程,并输出在2分钟内生成的计算机数量。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)