多线程编程

上传人:jiups****uk12 文档编号:39995548 上传时间:2018-05-22 格式:DOC 页数:9 大小:198.73KB
返回 下载 相关 举报
多线程编程_第1页
第1页 / 共9页
多线程编程_第2页
第2页 / 共9页
多线程编程_第3页
第3页 / 共9页
多线程编程_第4页
第4页 / 共9页
多线程编程_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《多线程编程》由会员分享,可在线阅读,更多相关《多线程编程(9页珍藏版)》请在金锄头文库上搜索。

1、 南南昌昌大大学学实实验验报报告告学生姓名: 学 号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期:2012 年 5 月 24 日 实验成绩: 实验实验 1 使用使用 Thread 类创建类创建 4 线程程序线程程序1、实验目的实验目的1) 理解线程的概念; 2) 了解程序的状态和生命周期; 3) 学习继承 Thread 类来创建线程; 4) 使用 Runnable 接口。2、实验任务实验任务本实验是要设计一个包含多线程运行的程序,在主程序中依次创建 4 个线程, 然后按顺序启动 4 个线程,每个线程在运行时所动作都是先睡眠 sleep 一会儿, 醒来之后再继续执行,在这个过程中

2、注意观察线程是如何调度运行的。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 threa

3、d4=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

4、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 秒之间,

5、换后结果为线程先睡眠 2 秒或 10 秒实验实验 2 一个实现一个实现 Runnable 接口的小应用程序接口的小应用程序一、实验目的一、实验目的 1、学习 Runnable 接口在 Appplet 程序中的使用; 2、掌握 Runnable 接口实现多线程的优点;3、加深对 Applet 中的几个常用方法的理解。 二、实验任务二、实验任务 在这个实验中要设计一个能显示时间的 Applet 程序,要完成这个实验,学 生应对 Applet 程序有个基本的了解,我们会先运行一个有些错误的程序,然后 在分析错误的原因之后,逐步修改已得到正确的程序。 三、实验步骤三、实验步骤程序清单程序清单 132:

6、 /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

7、.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 exte

8、nds 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=time

9、Calendar.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 右上角的关闭按钮能否起作用?请解释前后两个程序的差别?答:能

10、动态显示时间;右上角的关闭按钮也能正常使用;第二个程序创建了线 程,可以通过中断线程结束,第一个程序运行中始终独占 CPU 资源。实验三实验三 线程同步与资源共享线程同步与资源共享一、实验目的一、实验目的 1、 理解线程同步的含义; 2、 掌握 synchronized 同步方法与其同步语句的用法; 3、 学会使用 Thread Group 控制线程。 二、实验任务:二、实验任务: 本实验要用程序模拟一个银行账户存款的过程。程序中会有多个线程同时对一 个银行账户进行操作,每个线程的操作都按相同的步骤进行,即先查出该账户 当前的余额,在此基础上加 1,然后又把新余额写回账户上,这样连续执行若 干

11、次,最后账户上的余额就会累加成一个新余额值。由于银行账户是临界资源, 一次只能有一个程序,一个是没有实施线程同步的程序,另一个是实施线程同 步的程序,分别运行两个程序,可以看出来线程同步的作用。 三、实验内容三、实验内容 程序清单 134: /AccountWithoutSync.javapublic class AccountWithoutSyncprivate Account bank=new Account();private Thread threads=new Thread100;public static void main(String args)AccountWithoutSy

12、nc 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); cat

13、ch (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()与 not

14、ify()方法的使用。 二、实验任务二、实验任务 编写一个 Applet 小应用程序能够显示时间,当用户最小化 Applet 时,程序会 被挂起,当还原 Applet 时,程序又会恢复执行,同时 Applet 中应显示挂起和 恢复的时间。 三、实验步骤、实验步骤 程序清单 136: /SuspendResumeApplet.javaimport javax.swing.*;import java.util.*;import java.awt.*;public class SuspendResumeApplet extends JApplet implements RunnableThread

15、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();suspendT

16、ime=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);pr

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号