




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌大学实验报告学生姓名: 学 号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期: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(当前时间:+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年城投企业面试题目及答案
- 2025年上海半导体考试题及答案
- 2025年三基考试题库及答案技师
- 2025年上海教资考试试题及答案
- 2025年社工面试题及答案解析
- 村级安全协议书
- 村集体路协议书
- 林地续租协议书
- 果苗栽植协议书
- 2025年解放人才测试题及答案
- 云南省烟花爆竹经营单位主要负责人考试练习题1(100题)附答案
- 夏季预防空调病宣传
- 营养指导员技能实践考试题
- DB41T 1338-2016 石窟文物三维数字化技术规范
- psw零件提交保证书
- 2024年新华社招聘笔试参考题库附带答案详解
- 高级职业培训师(三级)职业资格鉴定考试题库(含答案)
- 赣州交通控股集团招聘笔试题库2024
- 计算机使用技能练兵竞赛参考答案
- NB-T31022-2012风力发电工程达标投产验收规程
- 智慧城轨数字化转型解决方案
评论
0/150
提交评论