学习到线程这章,自己写了个生产者消费者问题。
模拟的是电脑的生产和消费。
package thread;
class Computer {
private int id;
Computer(int id) {
this.id = id;
}
//override the method toString() from Object
public String toString() {
return "Computer:[" + id + "]";
}
}
class Factory {
private int items = 0;
Computer[] computer;
Factory() {
computer = new Computer[6];
}
public synchronized void push(Computer comp) {
while (items == computer.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
computer[items++] = comp;
// items++;
}
public synchronized Computer pop() {
while (items == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
return computer[--items];
}
}
class Ibm implements Runnable {
Factory fac = null;
Ibm(Factory f) {
this.fac = f;
}
public void run() {
for (int i = 0; i < 20; i++) {
Computer com = new Computer(i);
fac.push(com);
System.out.println("IBM assemble one computer " + com);
try {
Thread.sleep((long) (Math.random()*100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Kisters implements Runnable {
Factory fac = null;
Kisters(Factory f) {
this.fac = f;
}
public void run() {
for (int i = 0; i < 20; i++) {
Computer com = fac.pop();
System.out.println("Kisters consume one computer " + com);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ProducerConsumer {
public static void main(String[] args) {
Factory fac = new Factory();
Ibm ibm = new Ibm(fac);
Kisters kis = new Kisters(fac);
Thread t1 = new Thread(ibm);
Thread t2 = new Thread(kis);
t1.start();
t2.start();
}
}
分享到:
相关推荐
总的来说,Java中的生产者消费者问题利用了多线程和`BlockingQueue`的特性,有效地解决了线程间的数据交换和同步问题。这个模型广泛应用于各种并发场景,例如缓存管理、网络I/O等,是理解和掌握Java多线程编程的重要...
总之,这个项目通过Java的多线程和`BlockingQueue`,实现了生产者消费者问题的直观演示,无论是在GUI界面还是命令行环境中都能运行。对于学习Java并发编程和理解线程同步机制的人来说,这是一个非常有价值的实践案例...
总的来说,这个例子展示了如何使用Java的多线程同步机制来解决生产者-消费者问题。通过合理地使用`synchronized`关键字以及`wait()`、`notifyAll()`方法,可以实现对共享资源的并发访问控制,保证程序的正确性和效率...
在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...
操作系统实验(生产者消费者问题java实现) 在操作系统实验中,生产者消费者问题是一个经典的同步问题。这里,我们使用 Java 语言来实现这个问题的解决方案。 1. 生产者消费者问题的定义 生产者消费者问题是操作...
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...
通过以上分析,我们可以看出Java在解决生产者-消费者问题时提供了一系列强大的工具和机制,使得在并发环境中实现数据交换变得既高效又安全。理解并掌握这些知识点对于进行Java并发编程至关重要。
Java中解决这一问题的关键类是`java.util.concurrent`包下的`BlockingQueue`接口,它提供了线程安全的队列操作,如`put()`和`take()`方法,分别用于生产者放入产品和消费者取出产品。当队列满时,`put()`会阻塞生产...
os课程设计、通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制
用java编写,模拟生产者消费者问题,生产一个消费一个!
生产者消费者问题,描述一组生产者向一组消费者提供产品/消息。它们共享一个有界缓冲区,生产者向其中放产品/消息,消费者从中取产品/消息。只要缓冲区未满,生产者可放产品/消息,只要缓冲区有数据,消费者可取消息...
Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...
本主题将详细讲解生产者消费者问题及其Java实现。 生产者消费者问题是这样一种场景:一个或多个生产者线程生成数据并放入一个有限大小的缓冲区,同时一个或多个消费者线程从这个缓冲区取出数据进行处理。关键在于...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。该问题描述了两个并发执行的进程——生产者和消费者,它们共享一个有限大小的缓冲区。生产者进程负责生成数据(消息)并放入缓冲区,而消费者...
在Java编程中,"生产者消费者问题"是一个经典的多线程同步问题,它涉及到了如何在多线程环境下有效地共享资源。在这个问题中,"生产者"负责创建资源,而"消费者"则负责消费这些资源。为了确保生产者不会在资源耗尽时...