操作系统课程设计—多进程同步橘子苹果问题源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计—多进程同步橘子苹果问题源代码
import ;
import ;
import ;
import ;
import ;
import ;
import java.awt.*;
import ;
import ;
import ;
import javax.swing.*;
import ;
public class Apple
{
/**
* 生成一个缓冲池类对应的对象叫myStorage,以后所有的生产者线程和消费者线程都对这个myStorage对象进行操作!
*/
static MyStorage myStorage = new MyStorage();
private JFrame window ;
// 该数组用来存取生产橘子和苹果的线程,分别20个
static Increaseapple[] appleincrease = new Increaseapple[20];
static Increaseorange[] orangeincrease = new Increaseorange[20];
// 该数组用来存放消费者线程,最多20个
static Decreaseapple[] appledecrease = new Decreaseapple[20];
static Decreaseorange[] orangedecrease = new
Decreaseorange[20];
// 代表两个生产者对应线程的数目,i1为苹果,i2为橘子
static int i1 = 0;
static int i2 = 0;
// 代表消费者对应线程的数目,d1为苹果,d2为橘子
static int d1 = 0;
static int d2 = 0;
static TextArea textArea1;
static TextArea textArea2;
static JProgressBar progressbar = new JProgressBar(0,20);
static Draw draw1;
static JTextField t1;
static JTextField t2;
static JTextField t3;
static JTextField t4;
public void createMainWindow()
{
window = new JFrame("橘子苹果问题");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(700,700);
window.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel App1 = new JLabel("生产苹果者数:"); App1.setBounds(10, 500,100,25);
panel.add(App1);
progressbar.setStringPainted(true);
progressbar.setBounds(200,640,300,30); panel.add(progressbar);
progress p = new progress(myStorage);
p.start();
draw1 = new Draw(myStorage);
draw1.setBounds(0,0,700,300);
panel.add(draw1);
t1 = new JTextField();
t1.setBounds(120,500,60,25);
t1.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent event)
{
char ch = event.getKeyChar();
if (ch < '0' || ch > '9')
{
event.consume();
}
}
});
panel.add(t1);
JButton inapp1 = new JButton("增加");
inapp1.setBounds(190, 500, 60, 25);
panel.add(inapp1);
inapp1.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
if (i1 < 20)
{
increaseappleProducer();
t1.setText(String.valueOf(i1));
}
}
});。