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>,偶尔看到了生产者与消费者的一个经典的多线程同步问题.本人在工作中很少使用到多线程以及高并 ...
随机推荐
- 【BZOJ4606】[Apio2008]DNA DP
[BZOJ4606][Apio2008]DNA Description 分析如DNA序列这样的生命科学数据是计算机的一个有趣应用.从生物学的角度上说,DNA 是一种由腺嘌呤.胞嘧啶.鸟嘌呤和胸腺嘧啶这 ...
- 【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流
[BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一 ...
- angular 4 路由变化的时候实时监测刷新组件
当路由变化的时候刷新组件 比如说要刷新header组件 在header.ts里 import {Router, NavigationEnd} from "@angular/router&qu ...
- Spring Security OAuth2 源码分析
Spring Security OAuth2 主要两部分功能:1.生成token,2.验证token,最大概的流程进行了一次梳理 1.Server端生成token (post /oauth/token ...
- Linux云服务器下Tomcat部署超详细
基于阿里云Centos 7服务器的Tomcat 项目部署 工具:一台安装jdk1.8的Centos 6/7.X 云服务器(64位) Putty ssh远程连接云服务器的软件 FileZillaCli ...
- AOP通知无法切入指定方法
AOP通知,切入指定方法时拦截不到,可能是拦截的方法本身是被本类的其他方法调用的,根据AOP反射原理是无法拦截本类中方法调用的方法的.如: class AImpl implements AIf { s ...
- HDU_5538_House Building
House Building Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- Java技术大牛需要学习的25个技能
你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是class.object.interaction以及statediagrams. ...
- python爬虫系列(2)—— requests和BeautifulSoup
本文主要介绍python爬虫的两大利器:requests和BeautifulSoup库的基本用法. 1. 安装requests和BeautifulSoup库 可以通过3种方式安装: easy_inst ...
- 0605-Zuul构建API Gateway-使用Sidecar支持异构平台的微服务
使用非jvm语言 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_poly ...