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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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可视化模拟进程的并发执行相关推荐

  1. Java 如何模拟真正的并发请求?

    有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...

  2. Java线程---休眠问题来看并发执行

    同一个进程中的3个线程是并发执行的,我们通过输出的时间点现象来看,线程的并发执行 最近突然越来感觉写博客似乎是一种很怡情的事情,可能是无聊,可能是心里面对现状的不满,希望通过学习改变自己,也只是希望, ...

  3. python创建新进程_Python并发编程(进程的创建)

    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的. 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的 ...

  4. 进程的并发与并行,三种状态

    进程的特征: 1.动态性,是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期. 2.并发性,是进程的重要特征,同时也是OS的重要特 ...

  5. 进程(并发,并行) join start 进程池 (同步异步)

    一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象.进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有 ...

  6. Java基础(29)线程与进程、并发与并行、多线程的三种启动方式、买票案例

    1. 进程与线程 1. 进程与线程的概述: (1)进程: 进程就是正在运行的程序,是系统进行资源分配和调用的独立单位,每一个进程都有他自己的内存空间和系统资源 比如正在运行的应用程序(QQ,微信,QQ ...

  7. java 多线程(一 、并发并行、线程进程、如何创建线程)

    1.并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指连个或多个事件在同一时刻发生(同时方式). 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单核 ...

  8. 进程P1、P2、P3、P4和P5的前趋图如下图所示。若用PV操作控制进程P1~P5并发执行的过程,则需要设置6个信号S1、S2、S3、S4,且信号量S1~S4的初值都等于0。下图中a和b处应分别填写(

    进程P1.P2.P3.P4和P5的前趋图如下图所示.若用PV操作控制进程P1-P5并发执行的过程,则需要设置6个信号S1.S2.S3.S4,且信号量S1-S4的初值都等于0.下图中a和b处应分别填写( ...

  9. 并发执行变成串行_大白话Java并发面试问题之Java 8如何优化CAS性能?

    专注于Java领域优质技术,欢迎关注 来自:石杉的架构笔记 一.前言 这篇文章给大家聊一下java并发包下的CAS相关的原子操作,以及Java 8如何改进和优化CAS操作的性能. 因为Atomic系列 ...

最新文章

  1. Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录)
  2. font awesome java_Android使用Font Awesome显示小图标(一)
  3. [转]python yield
  4. MyBatis 动态 SQL 底层原理分析
  5. node php环境变量配置,关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍...
  6. 0分配不到地址_图解 Go 内存分配器
  7. Android 系统(225)---Android 7.0切换阿拉伯语,QuickSetting界面图标左右翻转
  8. 面试必会之ArrayList源码分析手写ArrayList
  9. vim 查找相同行 删除向同行
  10. 优秀课程案例:使用Scratch制作俄罗斯方块哈利·波特魔法消除版!
  11. typedef的使用详解
  12. matlab各种文件读写,Matlab的各种数据读取、文件读写等操作汇总
  13. Ubantu16.04安装五笔拼音输入法
  14. LeetCode781森林中的兔子题解
  15. Field not found; typically this occurs with arrays which are not mapped as single value
  16. 找回被删除的 Git Stashes
  17. xshell突出显示集——自定义配置
  18. NodeJS里如何连接MySQL并分别操作增删改查
  19. echo 3 drop_如何通过Drop In将Amazon Echo用作对讲机
  20. 一文带你了解什么是websocket

热门文章

  1. 工作站是高档的微型计算机 (,家用pc机和工作站有什么不同?
  2. 字符串模板和dom模板的区别
  3. 内置方法及模块初识,set的hash算法面试题
  4. 微信3.1.0.41逆向-微信3.1.0.41HOOK接口(WeChatHelper3.1.0.41.dll)使用说明
  5. 图床项目之后台框架设计
  6. 如何使百度网盘加速下载文件
  7. SAP S4 HANA 本地化报表配置(科目余额表/资产负债表/利润表/会计凭证明细表)
  8. K8S系列:pod更新镜像方法、原理
  9. okdownload下载mp4视频文件
  10. 一张图看懂华为2019年关键业务进展