`
Brucegaochina
  • 浏览: 40467 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

生产者消费者问题(java)

阅读更多
学习到线程这章,自己写了个生产者消费者问题。
模拟的是电脑的生产和消费。
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

    总的来说,Java中的生产者消费者问题利用了多线程和`BlockingQueue`的特性,有效地解决了线程间的数据交换和同步问题。这个模型广泛应用于各种并发场景,例如缓存管理、网络I/O等,是理解和掌握Java多线程编程的重要...

    生产者消费者问题 Java

    总之,这个项目通过Java的多线程和`BlockingQueue`,实现了生产者消费者问题的直观演示,无论是在GUI界面还是命令行环境中都能运行。对于学习Java并发编程和理解线程同步机制的人来说,这是一个非常有价值的实践案例...

    生产者消费者问题java的java编写的

    总的来说,这个例子展示了如何使用Java的多线程同步机制来解决生产者-消费者问题。通过合理地使用`synchronized`关键字以及`wait()`、`notifyAll()`方法,可以实现对共享资源的并发访问控制,保证程序的正确性和效率...

    生产者消费者问题 Java实现

    在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...

    操作系统实验(生产者消费者问题java实现).doc

    操作系统实验(生产者消费者问题java实现) 在操作系统实验中,生产者消费者问题是一个经典的同步问题。这里,我们使用 Java 语言来实现这个问题的解决方案。 1. 生产者消费者问题的定义 生产者消费者问题是操作...

    操作系统课程设计——生产者消费者问题Java图形界面动态演示

    设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...

    操作系统生产者与消费者问题Java简单模拟实现

    总的来说,"操作系统生产者与消费者问题Java简单模拟实现"这个项目提供了一个直观的多线程编程实例,帮助我们理解和实践Java中的线程同步技术,这对于理解和解决实际并发问题具有重要意义。通过分析这个项目,我们...

    模拟生产者消费者问题(java)

    通过以上分析,我们可以看出Java在解决生产者-消费者问题时提供了一系列强大的工具和机制,使得在并发环境中实现数据交换变得既高效又安全。理解并掌握这些知识点对于进行Java并发编程至关重要。

    生产者与消费者 java实现

    Java中解决这一问题的关键类是`java.util.concurrent`包下的`BlockingQueue`接口,它提供了线程安全的队列操作,如`put()`和`take()`方法,分别用于生产者放入产品和消费者取出产品。当队列满时,`put()`会阻塞生产...

    生产者消费者问题JAVA实现代码

    os课程设计、通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制

    操作系统生产者消费者问题java完整代码

    用java编写,模拟生产者消费者问题,生产一个消费一个!

    操作系统 生产者消费者问题 Java代码

    生产者消费者问题,描述一组生产者向一组消费者提供产品/消息。它们共享一个有界缓冲区,生产者向其中放产品/消息,消费者从中取产品/消息。只要缓冲区未满,生产者可放产品/消息,只要缓冲区有数据,消费者可取消息...

    java生产者消费者问题

    Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...

    操作系统 生产者消费者问题 Java代码产者消费者问题,描述一组生产者向一组消费者提供产品.zip

    本主题将详细讲解生产者消费者问题及其Java实现。 生产者消费者问题是这样一种场景:一个或多个生产者线程生成数据并放入一个有限大小的缓冲区,同时一个或多个消费者线程从这个缓冲区取出数据进行处理。关键在于...

    java 生产者消费者问题(源码)

    Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...

    JAVA实现线程间同步与互斥生产者消费者问题

    本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...

    java 编写的生产者与消费者问题

    在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。该问题描述了两个并发执行的进程——生产者和消费者,它们共享一个有限大小的缓冲区。生产者进程负责生成数据(消息)并放入缓冲区,而消费者...

    java生产者消费者demo

    在Java编程中,"生产者消费者问题"是一个经典的多线程同步问题,它涉及到了如何在多线程环境下有效地共享资源。在这个问题中,"生产者"负责创建资源,而"消费者"则负责消费这些资源。为了确保生产者不会在资源耗尽时...

Global site tag (gtag.js) - Google Analytics