资源简介
多道程序缓冲区协调操作
如下图1所示,有多个PUT操作要不断循环地向Buffer1送字符数据,有Move1操作不断地将Buffer1的数据取到Buffer2,Move2操作不断地将Buffer1的数据取到Buffer3,有多个GET操作要不断地从Buffer2和Buffer3中取数据。PUT、 MOVE、 GET每次操作一个数据,为了在操作的过程中要保证数据不丢失, 每个Buffer每次只能接受一个PUT或一个Move或一个Get。运用进程同步和互斥机制设计一个多道程序完成上述操作

代码片段和文件信息
package Main;
import UI.MainFace;
import UI.PopBufferCon;
public class Carrier extends Thread{
private int from;
private int to;
private int name;
private object obj;
public Carrier(int from int to int name) {
super();
this.from = from;
this.to = to;
this.name = name;
}
public void run()
{
while(manipulate.run)
{
synchronized(manipulate.buffer1)
{
try {
while(manipulate.buffer1.size() == 0)
{
System.out.println(“Buffer1 is emptyplease wait!“);
manipulate.waitNumber++;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
manipulate.buffer1.wait();
manipulate.waitNumber--;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
}
obj = manipulate.buffer1.remove();
System.out.println(“Move “+obj+“ to“ + to+ “ form “+from);
//从1移出 更新容量显示
manipulate.strBuffer1[manipulate.NoBuffer1++] =(“Move “+obj+“ to“ + to+ “ form “+from);
manipulate.buffer1Con.remove(obj);
//设置弹出窗口的1标签
manipulate.buffer1Contain = manipulate.buffer1Con.toString();
PopBufferCon.B1.setText(manipulate.buffer1Contain);
MainFace.List1.setListData(manipulate.strBuffer1);
Thread.sleep((long)(Math.random()*300*manipulate.speed));
manipulate.buffer1.notify();
}
catch(InterruptedException e)
{
System.out.println(“Move “+name+“ to“ + to+“ is interrupted!“);
}
}
if(to == 2)
{
synchronized(manipulate.buffer2)
{
try {
while(manipulate.buffer2.size() == manipulate.buffer2Capacity)
{
System.out.println(“Buffer2 is fullplease wait“);
manipulate.waitNumber++;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
manipulate.buffer2.wait();
manipulate.waitNumber--;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
}
if(manipulate.buffer2.add(obj))
{
System.out.println(“Move “+obj+“ to 2 from 1“);
//记录buffer2动态显示过程
manipulate.strBuffer2[manipulate.NoBuffer2++] = (“Move “+obj+“ to 2 from 1“);
manipulate.buffer2Con.add(obj); //更新buffer内的数据
manipulate.buffer2Contain = manipulate.buffer2Con.toString();
PopBufferCon.B2.setText(manipulate.buffer2Contain);
MainFace.List2.setListData(manipulate.strBuffer2);
Thread.sleep((long)(Math.random()*300*manipulate.speed));
manipulate.buffer2.notify();
}
}
catch(InterruptedException e)
{
System.out.p
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 396 2018-12-24 08:42 OSProject\.classpath
文件 385 2018-12-24 08:42 OSProject\.project
文件 642 2018-12-24 08:42 OSProject\.settings\org.eclipse.jdt.core.prefs
文件 4049 2018-12-28 10:55 OSProject\bin\Main\Carrier.class
文件 3364 2018-12-28 10:55 OSProject\bin\Main\Consumer.class
文件 1327 2018-12-27 19:13 OSProject\bin\Main\getString.class
文件 2206 2018-12-28 13:27 OSProject\bin\Main\manipulate.class
文件 2773 2018-12-28 09:48 OSProject\bin\Main\Procedure.class
文件 721 2018-12-28 09:37 OSProject\bin\UI\Dialog$1.class
文件 664 2018-12-28 09:37 OSProject\bin\UI\Dialog$2.class
文件 4395 2018-12-28 09:37 OSProject\bin\UI\Dialog.class
文件 3084 2018-12-28 08:22 OSProject\bin\UI\MainFace.class
文件 1732 2018-12-28 09:37 OSProject\bin\UI\MainInterface$1.class
文件 1573 2018-12-28 09:37 OSProject\bin\UI\MainInterface$2.class
文件 617 2018-12-28 09:37 OSProject\bin\UI\MainInterface$3.class
文件 617 2018-12-28 09:37 OSProject\bin\UI\MainInterface$4.class
文件 1106 2018-12-28 09:37 OSProject\bin\UI\MainInterface$5.class
文件 1108 2018-12-28 09:37 OSProject\bin\UI\MainInterface$6.class
文件 4301 2018-12-28 09:37 OSProject\bin\UI\MainInterface.class
文件 1539 2018-12-27 20:56 OSProject\bin\UI\PopBufferCon.class
文件 2468 2018-12-27 12:03 OSProject\hs_err_pid17456.log
文件 43778 2018-12-27 12:03 OSProject\hs_err_pid21864.log
文件 265058 2018-12-27 12:03 OSProject\replay_pid21864.log
文件 4608 2018-12-28 10:55 OSProject\src\Main\Carrier.java
文件 3209 2018-12-28 10:55 OSProject\src\Main\Consumer.java
文件 763 2018-12-27 11:16 OSProject\src\Main\getString.java
文件 1943 2018-12-28 13:27 OSProject\src\Main\manipulate.java
文件 1981 2018-12-28 09:48 OSProject\src\Main\Procedure.java
文件 3956 2018-12-28 09:37 OSProject\src\UI\Dialog.java
文件 3277 2018-12-28 08:22 OSProject\src\UI\MainFace.java
............此处省略13个文件信息
- 上一篇:大地电磁的粒子群法一维反演程序
- 下一篇:光学分辨率检验板
相关资源
- 升腾Win终端系统升级方法新版.doc
- Uninstall_Cortana_WINCLIENT.CN.rar
- 数据库课设:图书管理系统报告
- STM32基于rt_thread操作系统的SDHC卡文件
- 计算机图形学课设 画板
- 教学计划编制系统
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 课程作业:模拟仓库管理系统
- 模拟段页式虚拟存储管理中地址转换
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 二级文件系统(操作系统)
- uCOS编译环境建立 BC45 TASM
- Linux 操作系统实验(全)
- 操作系统实验综合设计【附代码】
- 操作系统共享内存实验
- 操作系统循环首次适应算法
- 操作系统课程设计实现可变分区存储
- 基于GTK的Linux环境下的简易任务管理器
- KTV点播系统 软件工程课设
- 操作系统课程设计 二级文件管理系统
- 加快Windows XP操作系统开机速度
- 操作系统教程课后答案华中科技大学
评论
共有 条评论