java多线程实现调度

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆交通大学综合性设计性实验报告

实验项目名称:进程调度(先来先服务)

实验项目性质: JAVA多线程

实验所属课程: JAVA程序设计

实验室(中心):语音大楼 8 楼 801

班级:软件专业 2012级2班

姓名:尚亚*

学号: 631206050216

指导教师:杨

实验完成时间: 2014 年 11 月 25 日

一、实验目的

1、理解程序、线程和进程的概念;

2、理解多线程的概念;

3、掌握线程的各种状态;

4、熟练使用Thread类创建线程;

5、熟练使用线程各种方法;

6、掌握线程的调度及线程同步的实现原理。

二、实验内容及要求

进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。

用JA V A语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。做一个能够直观体现多个进程时,CPU 是怎样调度就绪队列中的进程(按照先来先服务的原则)。

三、实验设备

PC机,windows7,eclipse。

四、设计方案

㈠设计主要思想

(1)要模拟进程的调度算法,必须先体现处进程及系统资源。

(2)要体现先来先服务的算法,就必须表现出当有一个进程进入CPU时其他进程不能进入,并在就绪队列中排队。本实验建立了四个圆移动的线程表示作业调度,用圆在表示就绪队列的方框中停留表示进程在就绪队列中排队。

(3)当有一个圆移动到表示CPU的范围内时,让其它线程在就绪队列中排队,当CPU内无进程时,先来的圆先移动,以表示CPU 对进程的调度。

㈡设计的主要步骤

(1)建立四个不同颜色的圆移动的线程,表示对四个进程的调度。

(2)当有一个表示进程的圆到达表示CPU范围内时,通过让其它几个圆停留在表示就绪队列的方框范围内,表示进程在就绪队列中排成队列。

(3)当第一个先到达的进程释放CPU,在排成队列的几个圆中选择先到达的圆,使其移动表示对先来的进程进行调度,直到所有的圆移动完毕。

五、主要代码

import java.awt.Font;

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

public class DoubleBuffer extends Frame //主类继承Frame类

{ private JButton button1;

private Image iBuffer,iBuffer1;

private Graphics gBuffer1,gBuffer2,gBuffer3,gBuffer4,gBuffer5,gBuffer6;

public paintThread pT1;//绘图线程

public paintThread pT2;//绘图线程

public paintThread pT3;//绘图线程

public paintThread pT4;//绘图线程

public int x1=100,y1=100;//小圆横、纵坐标

public int x2=100,y2=170;//小圆横、纵坐标

public int x3=100,y3=240;//小圆横、纵坐标

public int x4=100,y4=310;//小圆横、纵坐标

public int a=1;

public int b=2;

public int c=3;

public int d=4;

public DoubleBuffer()//构造函数

{

super("Java实现调度模拟");

this.setResizable(false); //窗体不可最大化

this.setSize(750,470); //设置窗口的首选大小

this.setVisible(true); //显示窗口

button1= new JButton("运行");

pT1=new paintThread(this,1);

pT2=new paintThread(this,2);

pT3=new paintThread(this,3);

pT4=new paintThread(this,4);

button1.setLocation(100, 415);

button1.setSize(90, 40);

add(button1);

button1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub

x1=100;

y1=100;//小圆横、纵坐标

x2=100;

y2=170;//小圆横、纵坐标

x3=100;

y3=240;//小圆横、纵坐标

x4=100;

y4=310;//小圆横、纵坐标

a=1;

b=2;

c=3;

d=4;

pT1.start(); //绘图线程启动

pT2.start(); //绘图线程启动

pT3.start(); //绘图线程启动

pT4.start(); //绘图线程启动

}

});

}

public void paint(Graphics scr) //重载绘图函数

{

scr.setColor(Color.RED); //设置小圆颜色

Font font1 = new Font("宋体", Font.BOLD, 30);

scr.setFont(font1);

scr.drawString("CPU", 580, 235);

Font font = new Font("宋体", Font.BOLD, 20);

scr.setFont(font);

scr.drawString("线程一", 250, 135);

scr.fillOval(x1,y1,60,60); //绘制小圆

相关文档
最新文档