生产者消费者问题实验java,java实现:《操作系统实验一》:模拟管程解决解决生产者-消费者...

java实现:《操作系统实验一》:模拟管程解决解决生产者-消费者

java实现:《操作系统实验一》:模拟管程解决解决生产者-消费者问题

在利用管程方法来解决生产者-消费者问题时,首先便是为它

们建立一个管程,并命名为procducerconsumer,或简称为

PC。

? 其中包括两个过程:

? (1) put(x)过程。

? (2) get(x)过程。

java实现:

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class Main {

public static void main(String[] args) {

Main main=new Main();

Producer_Customer p_c=main.new Producer_Customer();

Producer p=main.new Producer(p_c);

Customer c=main.new Customer(p_c);

p.start();

c.start();

}

class Producer_Customer{

public static final int bufferSize=20;

private int count;

private Lock lock;

private Condition notFull;

private Condition notEmpty;

public Producer_Customer() {

this.count = 0;

this.lock = new ReentrantLock();

this.notEmpty = lock.newCondition();

this.notFull = lock.newCondition();

}

//put过程

public void put() {

lock.lock();

while(count == bufferSize){

try {

notFull.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

count++;

System.out.println("放入第"+count+"号缓冲区");

notEmpty.signal();

lock.unlock();

}

//get过程

public void get() {

lock.lock();

while(count == 0){

try {

notEmpty.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

count--;

System.out.println("从第"+ count+"号缓冲区拿出");

notFull.signal();

lock.unlock();

}

}

/**

* 生产者

*/

class Producer extends Thread{

private Producer_Customer p_c;

public Producer(Producer_Customer p_c) {

this.p_c=p_c;

}

@Override

public void run() {

while(true) {

p_c.put();

}

}

}

/**

* 消费者

*/

class Customer extends Thread{

private Producer_Customer p_c;

public Customer(Producer_Customer p_c) {

this.p_c=p_c;

}

@Override

public void run() {

while(true) {

p_c.get();

}

}

}

}

运行结果:

817f8e4ec8b4c27b285a5123fac76473.png

java实现:《操作系统实验一》:模拟管程解决解决生产者-消费者相关教程

Java - 【缓存行】CacheLine

Java - 【缓存行】CacheLine CPU三级缓存 CPU直接操作内部寄存器中的数据速度比直接操作内存中的数据快百倍,为了减少这种差距,出现了缓存(Cache),现在缓存一般被封装进入CPU,分为三级缓存 L1(1ns) L2(3ns) L3(15ns) x86架构64位CPU,内存缓存行大

运用css和Html动画实现会动的摩天轮

运用css和Html动画实现会动的摩天轮 摩天轮效果图如下: html布局如下 css样式如下: * { margin: 0; padding: 0; } body, html { height: 100%; } body { background: url(images/2.jpg) no-repeat; background-size: 100% 100%; } img { display: block; }

Android-实现记住账号密码功能

Android-实现记住账号密码功能 文章标题 布局 代码 测试 布局 一个复选框 CheckBox android:id=@+id/checkbox android:radius=5dp android:text=记住我 android:layout_marginLeft=20dp android:layout_width=wrap_content android:layout_height=wrap_conten

数据类型转换运算符

数据类型转换运算符 在Java程序中要求参与计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 ①自动类型转换 一个int类型变量和一个byte类型变量进行加法运算, 结果会是什么数据类型呢? int i = 1;byte b = 2; 运算结果,变量

剑指Offer JZ58 对称的二叉树 C++实现

剑指Offer JZ58 对称的二叉树 C++实现 题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 方法一:递归 1、思路:如下图所示,判断一棵二叉树对称需要满足以下条件: L-val == R-va

JavaEE基础(一)JSP

JavaEE基础(一)JSP 文章目录 JSP基础 JSP简介 JSP显示过程 Tomcat服务器 JSP生命周期 JSP页面元素 九大内置对象 request对象 request对象方法: request内容乱码问题 response对象及方法 重定向与请求转发的区别 session对象 cookie对象 session对象 applicat

C++虚函数

C++虚函数 转载自:黑凤梨の博客 虚函数 虚函数的定义 虚函数是C++实现多态性的主要手段之一。 对于发送消息的类的对象来说,不论它们属于什么类,发送的消息形式都一样,而对于处理信息的类的对象对同一信息反应不同称为多态性。 在基类中定义一个虚函数,其

Java基础(chapter158-chapter170)总结

Java基础(chapter158-chapter170)总结 冒泡排序的思路如下面的动图所示: 代码实现: public class MaoPaoSort{ public static void main(String[] args) { int[] arr={24,57,13,69,80}; maoPaoSort(arr); //测试冒泡排序 for(int a:arr) { System.out.prin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值