Java管程解决生产者消费者问题
同样是实验存档。//。。
依然以生产者消费者问题作为背景。
管程(=“资源管理程序”)将资源和对资源的操作封装起来,资源使用者通过接口操作资源就ok,不用去考虑进程同步的问题。
管程:
package entity.producerconsumer;
public class Monition {
    private Buffer buffer;
    public Monition(int bufferSize) {
        buffer = new Buffer(bufferSize);
    }
    /**
     * 如果放入产品成功返回 true
     * @return
     */
    public synchronized boolean put() {
        if (buffer.notFull()) {
            buffer.putItem();
            return true;
        }
        return false;
    }
    /**
     * 如果取出产品成功返回 true
     * @return
     */
    public synchronized boolean get() {
        if (buffer.notEmpty()) {
            buffer.getItem();
            return true;
        }
        return false;
    }
    public String getStatus() {
        return "" + buffer;
    }
}
生产者 & 消费者:
package entity.producerconsumer;
public class Produc implements Runnable {
    /**
     * 统计生产者数量
     */
    private static int total = 0;
    /**
     * 生产者个体的 id
     */
    private int id;
    private Monition PC;
    public Produc(Monition monition) {
        id = ++total;
        PC = monition;
    }
    @Override
    public void run() {
        while (true) {
            if (PC.put()) {
                // 如果操作成功打印缓冲区状态
                System.out.println(id + " 号生产者: " + PC.getStatus());
            }
        }
    }
}
/
package entity.producerconsumer;
public class Consu implements Runnable {
    /**
     * 统计消费者数量
     */
    private static int total = 0;
    /**
     * 消费者个体的 id
     */
    private int id;
    private Monition PC;
    public Consu(Monition monition) {
        id = ++total;
        PC = monition;
    }
    @Override
    public void run() {
        while (true) {
            if (PC.get()) {
                // 如果操作成功打印缓冲区状态
                System.out.println(id + " 号消费者: " + PC.getStatus());
            }
        }
    }
}
/
测试:
package test; import entity.producerconsumer.Consu;
import entity.producerconsumer.Monition;
import entity.producerconsumer.Produc; public class MonitionTest {
public static void main(String[] args) {
Monition PC = new Monition(10);
// 创建 5 个生产者和 5 个消费者
for (int i = 0; i != 5; ++i) {
new Thread(new Produc(PC)).start();
new Thread(new Consu(PC)).start();
}
}
}
Java管程解决生产者消费者问题的更多相关文章
- Java 管程解决生产者消费者问题
		同样是实验存档.//.. 依然以生产者消费者问题作为背景. 管程(=“资源管理程序”)将资源和对资源的操作封装起来,资源使用者通过接口操作资源就 ok,不用去考虑进程同步的问题. 管程: packag ... 
- java多线程解决生产者消费者问题
		import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ... 
- Java如何使用线程解决生产者消费者问题?
		在Java编程中,如何使用线程解决生产者消费者问题? 以下示例演示如何使用线程解决生产者消费者问题. package com.yiibai; public class ProducerConsumer ... 
- 使用Java的BlockingQueue实现生产者-消费者
		http://tonl.iteye.com/blog/1936391 使用Java的BlockingQueue实现生产者-消费者 博客分类: Java JavaBlockingQueue阻塞队列 B ... 
- Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
		前面的一片文章我们已经讲过使用信号量解决生产者消费者问题.那么什么情况下我们须要引入条件变量呢? 这里借用 http://www.cnblogs.com/ngnetboy/p/3521547.htm ... 
- 基于java callable及future接口解决生产者消费者问题
		这两天复习java线程时,把java里面的线程基本知识点与jdk1.5以后新添加的一些类的使用都了解了一下,借用生产者消费者的问题来将他们实践一下. 题目:(题目在csdn一大牛的空间找的) 生产者- ... 
- java使用synchronized与Semaphore解决生产者消费者问题对比
		一.synchronized与信号量Semaphore简介 1.synchronized是java中的关键字,是用来控制线程同步的问题最常用的方法. 2.Semaphore是属于java的一个类,同样 ... 
- java信号量PV操作 解决生产者-消费者问题
		package test1; /** * 该例子演示生产者和消费者的问题(设只有一个缓存空间.一个消费者和一个生产者) * MySystem类定义了缓冲区个数以及信号量 * @author HYY * ... 
- JAVA多线程经典问题  -- 生产者 消费者
		工作2年多来一直也没有计划写自己的技术博客,最近辞职在家翻看<thingking in JAVA>,偶尔看到了生产者与消费者的一个经典的多线程同步问题.本人在工作中很少使用到多线程以及高并 ... 
随机推荐
- fopen()函数文件模板中w,w+,a,a+的区别
			"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果 ... 
- 160412、DWR使用笔记
			DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都 ... 
- 使用RODBC连接MySQL数据库(R-3.4.3)
			1.安装RODBC包 install.packages("RODBC") 2.配置ODBC 首先查看是否有mysqlODBC5.1Driver 如果没有mysqlODBC5.1D ... 
- Quartz.net 基于配置的调度程序实践
			1.Nuget 搜索并安装Quartz.net 2.3.3 2.添加配置到App.config <?xml version="1.0" encoding="utf ... 
- Rete_algorithm
			https://en.wikipedia.org/wiki/Rete_algorithm https://en.wikipedia.org/wiki/Rete_algorithm The Rete a ... 
- python基础-第五篇-5.4正则表达式
			正则基础知识 正则表达式是通过调用re模块实现的 在python里,正则表达式处理对象为字符串,所以正则里方法和字符串的方法有很多相似的地方:re.findall和find,re.split和spli ... 
- matrix---简单dp,边界边界-_-
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569 简单dp,恶心的边界处理,无语: if((i+j)%2==1) dp[i][j]=a[i-1][ ... 
- 002-java语言基础
			一.安装卸载 卸载:控制面板 安装:下载对应版本 注意1.安装路径→尽量不要有空格和汉字 注意2.安装之后,jre可以不用安装,jdk中含有 二.环境变量 环境变量:理解,一些快捷路径.方便快速查找应 ... 
- IntelliJ IDEA的几个常用快捷键
			一.将IntelliJ IDEA的快捷键设置为Eclipse环境的快捷键 如果之前长期使用Eclipse作为开发工具的程序员在刚开始接触IDEA的时候肯定会很不习惯,所以如果你没有太多时间去研究的话可 ... 
- HDevelop数据类型
			*图形类型*图像Hwnd:=3600read_image(Image, 'fabrik')disp_obj(Image, Hwnd)*region 区域gen_rectangle1(Rectangle ... 
