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();
}
}
}
}
运行结果:
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