操作系统多线程同步与互斥课程设计报告(3)

2018-12-21 13:09

showPush2(c,index2); showPop1(c,index1);//调用界面显示出栈程序

Main_win.full1.setText(String.valueOf(fullFirst));//int 转String Main_win.empty1.setText(String.valueOf(EmptyFirst));

Main_win.full2.setText(String.valueOf(fullSecond));//int 转String Main_win.empty2.setText(String.valueOf(EmptySecond));

history.his.append(\字符:\ index2++; getnum1++; putnum2++; } }

public synchronized void get2() {

boolean suspended=Main_win.s; if (suspended == true){ try {this.wait();}

catch (InterruptedException e) {} }

if(index2 == 0)//堆栈无数据,不能出栈 {

try{this.wait();}//等待其他线程把数据入栈 catch(InterruptedException e){} }

if(index2>0&&index2<=buffer2.length){ this.notify();//通知其他线程入栈 index2--;

char c = buffer2[index2]; y[index2]=String.valueOf(c); fullSecond=index2;

EmptySecond=buffer2.length-fullSecond; showPop2(c,index2);//调用界面显示出栈程序

Main_win.full2.setText(String.valueOf(fullSecond));//int 转String Main_win.empty2.setText(String.valueOf(EmptySecond)); history.his.append(\中字符\被get\\n\ getnum2++; } }

public static void showPush1(char c,int index){ //字符显示在主界面 String s=String.valueOf(c);

Main_win.see1.append(s+\ }

public static void showPop1(char c,int index){ int i;

x[index]=\

Main_win.see1.setText(\ for(i=0;i<=index;i++){ if(x[i]!=\

Main_win.see1.append(x[i]+\ //see1置空后重新添加原来除move掉的字符

} }

public static void resulewin(){ //最后运行时间,放入取出数目等显示在Result_win Result_win.resultarea.setText(\

Result_win.resultarea.append(\运行总时间:\

Result_win.resultarea.append(\放入总数:\ Result_win.resultarea.append(\取出总数:\ Result_win.resultarea.append(\目前数目:\ Result_win.resultarea.append(\放入总数:\ Result_win.resultarea.append(\取出总数:\ Result_win.resultarea.append(\目前数目:\ Result_win.resultarea.append(\放入总数:\ Result_win.resultarea.append(\取出总数:\ Result_win.resultarea.append(\目前数目:\ }

public static void datasave(){//保存数据 try{

File f=new File(\ data=new FileWriter(f);

datawriter = new BufferedWriter(data); String str=history.his.getText(); datawriter.append(str); datawriter.flush(); datawriter.close(); data.close(); }

catch (IOException e) {} } }

5.2 Runnable接口类

Runnable接口类有五个,分别为:BUFFER_PUT、BUFFERT_MOVE、BUFFERTH_MOVE、BUFFERT_GET和BUFFERTH_GET类。各个类类似,因此此处只给出BUFFER_PUT类的代码。

class BUFFER_PUT implements Runnable// BUFFER线程 {

private BUFFER buff;//生成的字母都保存到同步堆栈中 int i;

public BUFFER_PUT(BUFFER a){ buff = a; }

public void run() {

for(i=0;i<200;i++){

buff.put();//把字母入栈 try{

Thread.sleep((int)(Main_win.p1));

}//每产生一个字母后线程就随即睡眠一段时间

catch(InterruptedException e){} //suspended为TRUE等待,即暂停 } } }

5.3Main_win类

package javaapplication7; import java.awt.*;

import java.awt.event.*; import javax.swing.*; /** *

* @author a101269 */

public class Main_win extends javax.swing.JFrame { /**

* Creates new form Buffer_win */

static int p1,m2,m3,g2,g3,r1,r2,r3; static boolean s = false; static long starttime; static long endtime; static long gotime;

public Main_win() {

setTitle(\生产者消费者问题\ initComponents();

}

private void beginActionPerformed(java.awt.event.ActionEvent evt) { new history().setVisible(true); starttime=System.currentTimeMillis(); see1.setText(\ see2.setText(\ see3.setText(\ full1.setText(\ full2.setText(\ full3.setText(\ empty1.setText(\ empty2.setText(\ empty3.setText(\ waitnum.setText(\

BUFFER buff = new BUFFER();

Runnable buffer1 = new BUFFER_PUT(buff); Runnable buffer2 = new BUFFERT_MOVE(buff);

Runnable buffer3 = new BUFFERTH_MOVE(buff); Runnable buffer4 = new BUFFERT_GET(buff);

Runnable buffer5 = new BUFFERTH_GET(buff); Thread t11 = new Thread(buffer1);

Thread t12 = new Thread(buffer1); Thread t2 = new Thread(buffer2); Thread t3 = new Thread(buffer3); Thread t41 = new Thread(buffer4); Thread t42 = new Thread(buffer4); Thread t51 = new Thread(buffer5); Thread t52 = new Thread(buffer5);

t11.start(); t12.start(); t2.start(); t3.start(); t41.start(); t51.start();

t42.start();

t52.start();

// TODO add your handling code here:

}

private void endActionPerformed(java.awt.event.ActionEvent evt) { s = true;

endtime=System.currentTimeMillis(); gotime=endtime-starttime;

BUFFER buff = new BUFFER();

new Result_win().setVisible(true);// TODO add your handling code here: buff.resulewin();//结束,显示运行结果 }

private void datasaveActionPerformed(java.awt.event.ActionEvent evt) { BUFFER buff = new BUFFER(); buff.datasave(); {

JOptionPane.showMessageDialog(this,\保存成\ARNING_MESSAGE);

}// TODO add your handling code here: }

private void setokActionPerformed(java.awt.event.ActionEvent evt) { if(ps1.getText().equals(\

ms3.getText().equals(\ gs3.getText().equals(\ room2.getText().equals(\ {

JOptionPane.showMessageDialog(this,\有未填项\提\ARNING_MESSAGE);

} else{

r1 = Integer.parseInt(room1.getText()); r2 = Integer.parseInt(room2.getText()); r3 = Integer.parseInt(room3.getText()); p1 = Integer.parseInt(ps1.getText()); m2 = Integer.parseInt(ms2.getText()); m3 = Integer.parseInt(ms3.getText()); g2 = Integer.parseInt(gs2.getText()); g3 = Integer.parseInt(gs3.getText()); JOptionPane.showMessageDialog(this,\设置成\ARNING_MESSAGE);

功 醒功


操作系统多线程同步与互斥课程设计报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于承担行政职能事业单位改革的几点思考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: