java可视化模拟进程的并发执行

  • 模拟内容
  • 附录程序清单
  • 效果展示


模拟内容

利用JAVA语言,模拟进程的并发执行的过程。一是体现在单CPU环境下,对CPU的竞争;二是体现在无明确调度算法支撑下,进程调度运行的无序性;三是充分体现推进过程的异步性;四是充分体现并发执行进程的微观表现。

附录程序清单

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ThreadProcess {
    public static void main(String []arg) {
        ThreadFrame threadFrame=new ThreadFrame();
        threadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//框架关闭时退出程序
        Ball1 ball1=new Ball1(Panel1.b1,ThreadFrame.panel1);
        Ball2 ball2=new Ball2(Panel2.b2,ThreadFrame.panel2);
        Ball3 ball3=new Ball3(Panel3.b3,ThreadFrame.panel3);
        int i=0;
        int j=0;
        int[] array=new int[1000];
        for(i=0;i<1000;i++) {
            j=(int)(Math.random()*10%3);
            array[i]=j;
            //j=i;
            //array[i]=j%3;
        }
        while (true) {
            for(i=0;i<1000;i++) {
                switch (array[i]) {
                    case 0:
                        if(ball1.flag==true) {
                            ball1.run();
                        }
                        else {
                            ball1.yield();
                        }
                        break;
                    case 1:
                        if(ball2.flag==true) {
                            ball2.run();
                        }
                        else {
                            ball2.yield();
                        }
                        break;
                    case 2:
                        if(ball3.flag==true) {
                            ball3.run();
                        }
                        else {
                            ball3.yield();
                        }
                        break;
                    default: break;
                }
            }
        }
    }
}
class ThreadFrame extends JFrame {
    public static Panel1 panel1=new Panel1();
    public static Panel2 panel2=new Panel2();
    public static Panel3 panel3=new Panel3();
    public static Panel4 panel4=new Panel4();
    public ThreadFrame() {
        super("模拟进程的并发执行");
        setSize(850,500);
        setLocationRelativeTo(null);//把窗口位置设置到屏幕中心
        Container container=this.getContentPane();
        GridLayout gridLayout=new GridLayout(4,1);
        container.setLayout(gridLayout);
        container.add(panel4);
        container.add(panel1);
        container.add(panel2);
        container.add(panel3);
        setVisible(true);
    }
}
class Panel1 extends JPanel {
    JButton b_start1;
    //JButton b_stop1;
    public static ball b1;
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.orange);
        g.fillOval(b1.x,b1.y,60,60);
    }

    public Panel1() {
        setLayout(null);
        setBorder(BorderFactory.createTitledBorder("模拟进程1"));
        b_start1=new JButton("暂停");
        //b_stop1=new JButton("暂停");
        b_start1.setBounds(730,50,70,35);
        //b_stop1.setBounds(730,50,70,35);
        add(b_start1);
        //add(b_stop1);
        b1=new ball(50,35);
        b_start1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                //Ball1.flag=true;
                //Panel4.label2.setText("模拟进程1正在执行");
                if(Ball1.flag==true)
                {
                    Ball1.flag=false;
                    b_start1.setText("执行");
                    Panel4.label2.setText("模拟进程1已暂停");
                }
                else
                {
                    Ball1.flag=true;
                    b_start1.setText("暂停");
                    Panel4.label2.setText("模拟进行1正在执行");
                }
            }
        });
        /*b_stop1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Ball1.flag=false;
                Panel4.label2.setText("模拟进行1已暂停");
            }
        });*/
    }

}
class Panel2 extends JPanel {
    JButton b_start2;
    //JButton b_stop2;
    public static ball b2;
    public Panel2() {
        setLayout(null);
        setBorder(BorderFactory.createTitledBorder("模拟进程2"));
        b_start2=new JButton("暂停");
        //b_stop2=new JButton("暂停");
        b_start2.setBounds(730,50,70,35);
        //b_stop2.setBounds(730,50,70,35);
        add(b_start2);
        //add(b_stop2);
        b2=new ball(50,35);
        b_start2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                if(Ball2.flag==true) {
                    Ball2.flag=false;
                    b_start2.setText("执行");
                    Panel4.label3.setText("模拟进程1已暂停");
                }
                else {
                    Ball2.flag=true;
                    b_start2.setText("暂停");
                    Panel4.label3.setText("模拟进行1正在执行");
                }
            }
        });
        /*b_stop2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Ball2.flag=false;
                Panel4.label3.setText("模拟进程2已暂停");
            }
        });*/
    }
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.GREEN);
        g.fillOval(b2.getX(),b2.getY(),60,60);
    }
}
class Panel3 extends JPanel {
    JButton b_start3;
    //JButton b_stop3;
    public static ball b3;
    public Panel3() {
        setLayout(null);
        setBorder(BorderFactory.createTitledBorder("模拟进程3"));
        b_start3 = new JButton("暂停");
        //b_stop3 = new JButton("暂停");
        b_start3.setBounds(730, 50, 70, 35);
        //b_stop3.setBounds(730, 50, 70, 35);
        add(b_start3);
        //add(b_stop3);
        b3=new ball(50,35);
        b_start3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                if(Ball3.flag==true) {
                    Ball3.flag=false;
                    b_start3.setText("执行");
                    Panel4.label4.setText("模拟进程1已暂停");
                }
                else {
                    Ball3.flag=true;
                    b_start3.setText("暂停");
                    Panel4.label4.setText("模拟进行1正在执行");
                }
            }
        });
        /*b_stop3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                Ball3.flag = false;
                Panel4.label4.setText("模拟进程3已暂停");
            }
        });*/
    }
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.blue);
        g.fillOval(b3.getX(),b3.getY(), 60, 60);

    }
}

class Panel4 extends JPanel {
    public static JLabel label2=new JLabel("模拟进程1正在执行");
    public static JLabel label3=new JLabel("模拟进程2正在执行");
    public static JLabel label4=new JLabel("模拟进程3正在执行");
    public static JLabel label5=new JLabel("进程并发执行过程演示");
    public Panel4() {
        setLayout(null);
        Font f=new Font("宋体",Font.PLAIN,30);
        label5.setFont(f);
        label5.setBounds(250,10,500,50);
        label2.setBounds(250,60,150,25);
        label3.setBounds(450,60,150,25);
        label4.setBounds(650,60,150,25);
        label2.setBorder(BorderFactory.createLoweredBevelBorder());
        label3.setBorder(BorderFactory.createLoweredBevelBorder());
        label4.setBorder(BorderFactory.createLoweredBevelBorder());
        add(label5);
        add(label2);
        add(label3);
        add(label4);
    }
}

class Ball1 extends Thread {
    public static boolean flag=true;
    public Panel1 panel1;
    public ball b;
    public Ball1(ball b,Panel1 panel1) {
        this.b=b;
        this.panel1=panel1;
    }
    @Override
    public void run() {
        if(b.x<650) {
            b.x+=10;
            panel1.repaint();
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            b.x=50;
        }
    }

}
class Ball2 extends Thread {
    public static boolean flag=true;
    public Panel2 panel2;
    public ball b;
    public Ball2(ball b,Panel2 panel2) {
        this.b=b;
        this.panel2=panel2;
    }
    @Override
    public void run() {
        if(b.x<650) {
            b.x+=10;
            panel2.repaint();
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            b.x=50;
        }
    }
}
class Ball3 extends Thread {
    public static boolean flag=true;
    public Panel3 panel3;
    public ball b;
    public Ball3(ball b,Panel3 panel3) {
        this.b=b;
        this.panel3=panel3;
    }
    public void run() {
        if(b.x<650) {
            b.x+=10;
            panel3.repaint();
            try {
                Thread.sleep(30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else {
            b.x=50;
        }
    }
}
class ball {
    public int x;
    public int y;
    public ball(int x,int y) {
        this.x=x;
        this.y=y;
    }
    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}

效果展示

java high cpu模拟 java模拟运行_操作系统


通过按钮来控制小球的运动,观察小球运动速度的变化。