《多线程编程》word版.doc

上传人:wux****ua 文档编号:7957965 上传时间:2020-03-26 格式:DOC 页数:9 大小:214KB
返回 下载 相关 举报
《多线程编程》word版.doc_第1页
第1页 / 共9页
《多线程编程》word版.doc_第2页
第2页 / 共9页
《多线程编程》word版.doc_第3页
第3页 / 共9页
点击查看更多>>
资源描述
南昌大学实验报告学生姓名: 学 号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期:2012年5月24日 实验成绩: 实验1 使用Thread类创建4线程程序1、 实验目的1) 理解线程的概念;2) 了解程序的状态和生命周期;3) 学习继承Thread类来创建线程;4) 使用Runnable接口。2、 实验任务本实验是要设计一个包含多线程运行的程序,在主程序中依次创建4个线程,然后按顺序启动4个线程,每个线程在运行时所动作都是先睡眠sleep一会儿,醒来之后再继续执行,在这个过程中注意观察线程是如何调度运行的。3、 实验步骤新建工程名字为MultiThread,在工程中新建一个程序命名为FourThreads.java程序清单131:/FourThreads.javapublic class FourThreadspublic static void main(String args)MyThread thread1=new MyThread(thread1);MyThread thread2=new MyThread(thread2);MyThread thread3=new MyThread(thread3);MyThread thread4=new MyThread(thread4);System.err.println(准备启动线程.);thread1.start();thread2.start();thread3.start();thread4.start();System.err.println(子线程已全部启动,主线程结束n.);class MyThread extends Threadprivate int sleepTime;public MyThread(String name)super(name);sleepTime=(int)(Math.random()*5001);public void run()trySystem.err.println(getName()+将休眠+sleepTime+毫秒);Thread.sleep(sleepTime);catch(InterruptedException exception)exception.printStackTrace();System.err.println(getName()+结束休眠);运行结果:思考1、 请问源程序中的Thread.sleep(sleppTime)的作用是什么?如果将sleepTime的值换成2000或10000,则程序运行结果有什么变化?答:作用是叫线程先睡眠05秒之间,换后结果为线程先睡眠2秒或10秒实验2 一个实现Runnable接口的小应用程序一、实验目的1、 学习Runnable接口在Appplet程序中的使用;2、 掌握Runnable接口实现多线程的优点;3、 加深对Applet中的几个常用方法的理解。二、实验任务在这个实验中要设计一个能显示时间的Applet程序,要完成这个实验,学生应对Applet程序有个基本的了解,我们会先运行一个有些错误的程序,然后在分析错误的原因之后,逐步修改已得到正确的程序。三、实验步骤程序清单132:/AppletNoThread.javaimport javax.swing.*;import java.util.*;import java.awt.*;public class AppletNoThread extends JAppletint hours,mins,secs;public void start()Calendar time=Calendar.getInstance();hours=time.get(Calendar.HOUR);mins=time.get(Calendar.MINUTE);secs=time.get(Calendar.SECOND);System.out.println(秒:+secs);repaint();public void paint(Graphics g)super.paint(g);g.drawString(String.valueOf(hours)+:+String.valueOf(mins)+:+String.valueOf(secs),50,50);运行结果:程序清单133:/ AppletNoThreaded.javaimport javax.swing.*;import java.util.*;import java.awt.*;public class AppletNoThread extends JApplet implements RunnableThread appletThread;int hours,mins,secs;public void start()appletThread=new Thread(this);appletThread.start();public void run()while(true)Calendar timeCalendar=Calendar.getInstance();hours=timeCalendar.get(Calendar.HOUR);mins=timeCalendar.get(Calendar.MINUTE);secs=timeCalendar.get(Calendar.SECOND);System.out.println(秒:+secs);repaint();public void paint(Graphics g)super.paint(g);g.drawString(String.valueOf(hours)+:+String.valueOf(mins)+:+String.valueOf(secs),50,50);运行结果:思考编好程序并保存,然后编译运行,这次Applet程序能动态实时显示时间吗?同时,再试试Applet右上角的关闭按钮能否起作用?请解释前后两个程序的差别?答:能动态显示时间;右上角的关闭按钮也能正常使用;第二个程序创建了线程,可以通过中断线程结束,第一个程序运行中始终独占CPU资源。实验三 线程同步与资源共享一、实验目的1、 理解线程同步的含义;2、 掌握synchronized同步方法与其同步语句的用法;3、 学会使用Thread Group控制线程。二、实验任务:本实验要用程序模拟一个银行账户存款的过程。程序中会有多个线程同时对一个银行账户进行操作,每个线程的操作都按相同的步骤进行,即先查出该账户当前的余额,在此基础上加1,然后又把新余额写回账户上,这样连续执行若干次,最后账户上的余额就会累加成一个新余额值。由于银行账户是临界资源,一次只能有一个程序,一个是没有实施线程同步的程序,另一个是实施线程同步的程序,分别运行两个程序,可以看出来线程同步的作用。三、实验内容程序清单134:/AccountWithoutSync.javapublic class AccountWithoutSyncprivate Account bank=new Account();private Thread threads=new Thread100;public static void main(String args)AccountWithoutSync test=new AccountWithoutSync();System.out.println(最后存款是:+test.bank.getBalance();public AccountWithoutSync()for(int i=0;i100;i+)threadsi=new Thread(new PayInThread();threadsi.start();class PayInThread extends Threadpublic void run()int balance;balance=bank.getBalance()+1;tryThread.sleep(10); catch (InterruptedException ex)System.out.println(ex);bank.setBalance(balance);class Accountprivate int balance=0;public int getBalance()return balance;public void setBalance(int balance)this.balance=balance;运行结果:实验四 wait()和notify()挂起与恢复线程一、实验目的1) 理解线程的挂起与恢复的概念;2) 掌握wait()与notify()方法的使用。二、实验任务编写一个Applet小应用程序能够显示时间,当用户最小化Applet时,程序会被挂起,当还原Applet时,程序又会恢复执行,同时Applet中应显示挂起和恢复的时间。三、实验步骤程序清单136:/SuspendResumeApplet.javaimport javax.swing.*;import java.util.*;import java.awt.*;public class SuspendResumeApplet extends JApplet implements RunnableThread appletThread;boolean suspendFlag;Calendar time,suspendTime,resumeTime;int hours,mins,secs,sushours,susmins,sussecs,rehours,remins,resecs;public void init()suspendFlag=false;appletThread=new Thread(this);appletThread.start();public void start()resumeThread();public void stop()suspendThread();suspendTime=time;sushours=suspendTime.get(Calendar.HOUR);susmins=suspendTime.get(Calendar.MINUTE);sussecs=suspendTime.get(Calendar.SECOND);public synchronized void resumeThread()if(suspendFlag)suspendFlag=false;notify();resumeTime=Calendar.getInstance();rehours=resumeTime.get(Calendar.HOUR);remins=resumeTime.get(Calendar.MINUTE);resecs=resumeTime.get(Calendar.SECOND);private synchronized void waitForNotificationToResume() throws InterruptedExceptionwhile(suspendFlag)wait();private synchronized void suspendThread()suspendFlag=true;public void run()while(true)tryappletThread.sleep(500);waitForNotificationToResume(); catch (InterruptedException exception)exception.printStackTrace();time=Calendar.getInstance();hours=time.get(Calendar.HOUR);mins=time.get(Calendar.MINUTE);secs=time.get(Calendar.SECOND);System.out.println(秒表:+secs);repaint();public void paint(Graphics g)super.paint(g);g.drawString(当前时间:+String.valueOf(hours)+:+String.valueOf(mins)+:+String.valueOf(secs),50,50);g.drawString(挂起时间:+String.valueOf(hours)+:+String.valueOf(mins)+:+String.valueOf(secs),50,80);g.drawString(恢复时间:+String.valueOf(hours)+:+String.valueOf(mins)+:+String.valueOf(secs),50,100);运行结果:
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!