`

经典同步模型-生产者消费者java代码实现

阅读更多
package cn.smallbug.thread;

/**
 * 资源定义
 * 
 * @timestamp Feb 13, 2016 11:55:10 PM
 * @author smallbug
 */
class Resource {
	private String name;
	private int age = 0;
	private boolean flag = false;

	public synchronized void setShow(String name) {
		while (flag)
			try {
				this.wait();
			} catch (InterruptedException e) {
			}
		this.name = name + age++;
		System.out.println("~~~~~~" + Thread.currentThread().getName() + "~~生产者~~~~" + this.name);
		flag = true;
		this.notifyAll();
	}

	/**
	 * 生产者
	 * 
	 * @timestamp Feb 13, 2016 11:55:24 PM
	 */
	public synchronized void getShow() {
		while (!flag)
			try {
				this.wait();
			} catch (InterruptedException e) {
			}
		System.out.println("~~~消费者~~~" + Thread.currentThread().getName() + "~~~~~~" + this.name);
		flag = false;
		this.notifyAll();
	}
}

/**
 * 生产者
 * 
 * @timestamp Feb 13, 2016 11:55:30 PM
 * @author smallbug
 */
class Production implements Runnable {
	private Resource r;

	Production(Resource r) {
		this.r = r;
	}

	@Override
	public void run() {

		while (true) {
			r.setShow("小虫");
		}
	}

}

/**
 * 消费者
 * 
 * @timestamp Feb 14, 2016 12:17:29 AM
 * @author smallbug
 */
class Consumer implements Runnable {
	private Resource r;

	Consumer(Resource r) {
		this.r = r;
	}

	@Override
	public void run() {
		while (true) {
			r.getShow();
		}

	}

}

public class WaitAwake {
	public static void main(String[] args) {
		Resource re = new Resource();

		Production p = new Production(re);
		Consumer c = new Consumer(re);

		Thread t1 = new Thread(p);
		Thread t2 = new Thread(c);
		t1.start();
		t2.start();
	}
}

 

0
1
分享到:
评论

相关推荐

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    生产者 消费者 进程 可视化 java

    以车库为例子,一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。 根据进程同步机制,编写一个解决上述问题的可视化程序,可显示缓冲池状态、放数据、取数据等...

    模拟仿真“生产者-消费者”问题的解决过程及方法

    本课程设计的目的是通过设计一个消费者进程与生产者进程的同步模拟系统,认识进程间的同步机制生产者消费者问题是一个著名的进程...这是一个用Eclipse为工具、java为编程语言而实现模拟消费者进程与生产者进程的同步。

    java中生产者和消费者模型

    理解java中生产者消费者模型,以及如何利用双缓冲机制来解决同步与死锁问题。

    java多线程编程总结

    Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...

    Java多线程编程总结

    Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...

    Java 线程总结

    Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...

    java多线程笔记

    Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58

    Java开发技术大全(500个源代码).

    producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 ...

    JAVA上百实例源码以及开源项目源代码

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    JAVA上百实例源码以及开源项目

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    Java并发编程:阻塞队列

     使用非阻塞队列的时候有一个很大问题是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,必须额外地实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。但是有了阻塞队列不一样了,它会

    米哈游笔试题目-Java方向.docx

    生产者-消费者模型:需要设计一个多线程程序,其中有多个生产者和多个消费者,生产者不断产生数据放入共享队列,消费者从队列中取出数据进行消费。 线程池类:需要设计一个线程池类,能够动态管理线程数量,支持可...

    java初学者必看

    11.5.3 运行生产者/消费者 11.6 死锁 11.7 本章习题 第12章 异常处理 12.1 异常的概念 12.2 异常的基本样式 12.3 Java异常类 12.3.1 异常类层次结构 12.3.2 异常处理方法 12.4 异常捕获 12.4.1 异常捕获...

    Java SE实践教程 源代码 下载

    6.5.2 生产者、消费者问题.. 137 6.6 小结 140 第7章 我要彩色照片——SWING的基本概念 141 7.1 讲解 142 7.1.1 Swing的基本概念 142 7.1.2 Swing组件继承关系 142 7.1.3 Swing组件一览 143 7.1.4 Swing和MVC...

    使用多线程模拟MQ系统应用

    说明:本人在给Java游戏开发特训班讲解多线程时,需要说明多线程同步的问题,其中讲解了使用“生产者-消费者”模型来解决同步问题。可是当时特训班的学生不是很明白,特别是不明白这个模型怎么使用。这可能是由于...

Global site tag (gtag.js) - Google Analytics