完整版者消费者问题 操作系统毕业课程设计java源代码.docx

上传人:b****5 文档编号:3634627 上传时间:2022-11-24 格式:DOCX 页数:39 大小:23.82KB
下载 相关 举报
完整版者消费者问题 操作系统毕业课程设计java源代码.docx_第1页
第1页 / 共39页
完整版者消费者问题 操作系统毕业课程设计java源代码.docx_第2页
第2页 / 共39页
完整版者消费者问题 操作系统毕业课程设计java源代码.docx_第3页
第3页 / 共39页
完整版者消费者问题 操作系统毕业课程设计java源代码.docx_第4页
第4页 / 共39页
完整版者消费者问题 操作系统毕业课程设计java源代码.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

完整版者消费者问题 操作系统毕业课程设计java源代码.docx

《完整版者消费者问题 操作系统毕业课程设计java源代码.docx》由会员分享,可在线阅读,更多相关《完整版者消费者问题 操作系统毕业课程设计java源代码.docx(39页珍藏版)》请在冰豆网上搜索。

完整版者消费者问题 操作系统毕业课程设计java源代码.docx

完整版者消费者问题操作系统毕业课程设计java源代码

**************************************Main主函数

****************************************************

packageJM;

 

importjava.awt.BorderLayout;

importjava.awt.CardLayout;

importjava.awt.Color;

importjava.awt.Container;

importjava.awt.Dimension;

importjava.awt.FlowLayout;

importjava.awt.GridLayout;

importjava.awt.Toolkit;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.awt.event.WindowListener;

importjava.util.Date;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

importjavax.swing.JProgressBar;

importjavax.swing.JScrollPane;

importjavax.swing.JSlider;

importjavax.swing.JTextArea;

importjavax.swing.JTextField;

importjavax.swing.event.ChangeEvent;

importjavax.swing.event.ChangeListener;

importClass.Buffer;

importClass.Consumer;

importClass.Count;

importClass.InterfaceModule;

importClass.Producer;

importClass.Semaphore;

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

importjavax.swing.event.*;

importjava.util.*;

publicclassMainextendsJFrame{

publicMainframe;定义引用自身的主界面对象,在其他类中引用,以建立类间的联系

intp,c,b;生产者数,消费数,缓冲区大小

JPanelp0;

JPanelp1;

JPanelp2;

JPanelp21;

JPanelp211,p212,p213;

JPanelp22;

JPanelp3;

JPanelp31;

JPanelp4;

JPanelp41;

JScrollPanep41;

JPanelp42;

JPanelp43;

JPanelp44;

JLabellb1;

JLabellb2;

JLabellb3;

JLabellb4;

JLabellb5;

JLabellb6;

JLabellb7;

publicJTextAreaa1;

JButtonb1;

JButtonb2;

JButtonb3;

JButtonb4;

JButtonb5;

publicJProgressBarpb1;生产者生产速度进度条

publicJProgressBarpb2;消费者消费速度进度条

publicJProgressBarpb3;缓冲区剩余产品数进度条

publicJSliderjs1;设置生产速度滑动竿

publicJSliderjs2;设置消费熟读滑动杆

publicJSliderjs3;

信号量****************************************************************************************

Semaphorenotfull,notempty;不满和不空信号量

Countnotfull_count,notempty_count;

InterfaceModuleIM;

Bufferbuffer;=newBuffer(b,0);

*******************************************

*采用管程之后,此处的初始化应去掉

Semaphoremutex;=newSemaphore

(1);互斥信号量

Semaphorefull;=newSemaphore(0);同步信号量

Semaphoreempty;=newSemaphore(b);同步信号量

*

publicThread[]thread;=newThread[100];线程组

Thread[]thread1=newThread[100];

publicMain(Stringname,intpp,intcc,intbb){

TODOAuto-generatedconstructorstub

super(name);

this.p=pp;由界面传入的生产者消费者以及缓冲区的数量

this.c=cc;

this.b=bb;

js1=newJSlider(0,10);

js2=newJSlider(0,10);

pb1=newJProgressBar(JProgressBar.VERTICAL,0,10);进度条

pb2=newJProgressBar(JProgressBar.VERTICAL,0,10);进度条

pb3=newJProgressBar(JProgressBar.VERTICAL,0,b);进度条

pb1.setOrientation(JProgressBar.VERTICAL);

pb1.setStringPainted(true);

pb2.setStringPainted(true);

pb3.setStringPainted(true);

buffer=newBuffer(this.b,0);

*采用管程之后,此处应去掉

mutex=newSemaphore

(1);互斥信号量

full=newSemaphore(0);

empty=newSemaphore(this.b);

*

frame=this;

buffer=newBuffer(b,0);

notfull=newSemaphore(0,frame);

IM=newInterfaceModule(frame);

notempty=newSemaphore(0,frame);

notfull_count=newCount(0);

notempty_count=newCount(0);

thread=newThread[100];

thread=newThread[100];

aa=this;

********************************************************

a1=newJTextArea(12,50);

p0=newJPanel();主面板

p1=newJPanel();

p2=newJPanel();

p21=newJPanel();

p211=newJPanel();

p212=newJPanel();

p213=newJPanel();

p22=newJPanel();

p3=newJPanel();

p31=newJPanel();

p4=newJPanel();

p41=newJScrollPane(a1);

p42=newJPanel();

p43=newJPanel();

p44=newJPanel();

lb1=newJLabel("生产者消费者",JLabel.CENTER);

lb2=newJLabel("生产产品的速度");,JLabel.VERTICAL);

lb3=newJLabel("消耗产品的速度");,JLabel.VERTICAL);

lb4=newJLabel("缓冲区产品数");,JLabel.VERTICAL);

lb5=newJLabel("设置生产速度");,JLabel.VERTICAL);

lb6=newJLabel("设置消费速度");,JLabel.VERTICAL);

lb7=newJLabel("生产消费情况");,JLabel.VERTICAL);

b1=newJButton("开始");

b1.addActionListener(newStart());

b2=newJButton("暂停");

b2.addActionListener(newStop());

b3=newJButton("继续");

b3.addActionListener(newContinue());

b4=newJButton("分析");

b4.addActionListener(newANalysis());

b5=newJButton("退出");

b5.addActionListener(newExit());

Containercontainer=this.getContentPane();

container.setLayout(newBorderLayout());

p0.setLayout(newBorderLayout());

p1.setLayout(newFlowLayout());

p2.setLayout(newGridLayout(1,2));

p21.setLayout(newGridLayout(1,3));

p4.setLayout(newGridLayout(2,1));

p42.setLayout(newGridLayout(2,1));

add(p0);

p0.add(p1,BorderLayout.NORTH);

p0.add(p2,BorderLayout.CENTER);

p0.add(p3,BorderLayout.EAST);

p0.add(p4,BorderLayout.SOUTH);

p1.add(lb1);

p2.add(p21);

p21.setBackground(Color.GREEN);

p21.add(p211);

p21.add(p212);

p21.add(p213);

p211.add(lb2);

p211.add(pb1);

p212.add(lb3);

p212.add(pb2);

p213.add(lb4);

p213.add(pb3);

p22.add(lb5);

p22.add(js1);

p22.add(lb6);

p22.add(js2);

p2.add(p22);

p22.setBackground(Color.GRAY);

p22.add(lb5);

p22.add(js1);

p22.add(lb6);

p22.add(js2);

p3.add(b5);

p4.add(p41);

p4.add(p42);

p42.add(p43);

p42.add(p44);

p43.add(lb7,JLabel.CENTER);

p44.add(b1);

p44.add(b2);

p44.add(b3);

p44.add(b4);

p44.add(b5);

p1.setBackground(Color.GRAY);

p2.setBackground(Color.GRAY);

p3.setBackground(Color.GRAY);

p4.setBackground(Color.GRAY);

p3.setSize(100,100);

p31.setBackground(Color.GRAY);

pack();

setBackground(Color.lightGray);

setVisible(true);

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();设置主界居中显示

intscreenWidth=screenSize.width;

intscreenHeight=screenSize.(x,y);

}

classStartimplementsActionListener{

publicvoidactionPerformed(ActionEvente)

{

*采用管程之后,此处应去掉

for(inti=0;i

thread[i]=newThread(newProducer(Frame,""+(i+1),mutex,full,empty,buffer));

for(inti=p;i

thread[i]=newThread(newConsumer(Frame,""+(i+1-p),mutex,full,empty,buffer));

for(inti=0;i

thread[i].start();启动所有线程

*

for(inti=0;i

thread[i]=newThread(newProducer(frame,"生产者"+(i+1),IM,notfull,notempty,buffer,notfull_count,notempty_count));

for(inti=p;i

thread[i]=newThread(newConsumer(frame,"消费者"+(i+1-p),IM,notfull,notempty,buffer,notfull_count,notempty_count));

for(inti=0;i

thread[i].start();启动所有线程

}

}

classStopimplementsActionListener{

publicvoidactionPerformed(ActionEvente)

{

for(inti=0;i

thread[i].suspend();阻塞所有线程

}

}

classContinueimplementsActionListener{

publicvoidactionPerformed(ActionEvente)

{

for(inti=0;i

thread[i].resume();

}

}

classANalysisimplementsActionListener{

publicvoidactionPerformed(ActionEvente)

{

newAnalysis("分析",buffer,frame);

}

}

classExitimplementsActionListener{

publicvoidactionPerformed(ActionEvente)

{

System.exit(0);

}

}

classwinCloseextendsWindowAdapter

{

publicvoidwindowClosing(WindowEvente)

{

System.exit(0);

}

}

}

**********************************************************************

*******************************Analysis.java结果分析类

packageJM;

importjava.lang.*;

importjava.io.*;

importjava.awt.*;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.*;

importClass.Buffer;

importJM.JM1;

importClass.Buffer;

publicclassAnalysisextendsJFrame{

JPanelp1;

JPanelp2;

JPanelp3;

JScrollPanep4;

JPanelp5;

Bufferbuffer;

JLabellb1;

JLabellb2;

JLabellb3;

JLabellb4;

JLabellb5;

JButtonb1;

JButtonb2;

Mainmain;

JTextAreayswh;

JScrollPaneklts;

publicAnalysis(Stringaa,Bufferbuffer,Mainmain){

super(aa);

setLayout(newBorderLayout());

this.buffer=buffer;

this.main=main;

p1=newJPanel();

p2=newJPanel();

p3=newJPanel();

yswh=newJTextArea(150,50);

p4=newJScrollPane(yswh);

yswh.setText(main.a1.getText());

p5=newJPanel();

klts=newJScrollPane(yswh);

p4=newJPanel();

p5=newJPanel();

thread[2].getState()

lb1=newJLabel("模拟分析结果",JLabel.CENTER);

lb2=newJLabel("生产者共生产了"+buffer.getPnumber()+"产品",JLabel.CENTER);

lb2=newJLabel("生产者共生产了"+"产品",JLabel.CENTER);

lb3=newJLabel("消费者共消费了"+buffer.getCnumber()+"产品",JLabel.CENTER);

lb3=newJLabel("消费者共消费了",JLabel.CENTER);

lb4=newJLabel("缓冲区剩余的产品数为"+buffer.getValue(),JLabel.CENTER);

lb4=newJLabel("缓冲区剩余的产品数为",JLabel.CENTER);

lb5=newJLabel("生产者消费者各线程此刻所处的状态",JLabel.CENTER);

b1=newJButton("确定");

b2=newJButton("返回");

b1.addActionListener(newqueding());

b2.addActionListener(newquxiao());

add(p1,BorderLayout.NORTH);

p1.setLayout(newGridLayout(2,1));

p1.add(lb1);

p1.add(p2);

p2.add(lb1);

p1.add(p3);

p3.ad

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1