ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:117.08KB ,
资源ID:2806752      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2806752.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计实验七 线程.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计实验七 线程.docx

1、面向对象程序设计实验七 线程实验七 线程云南大学信息学院 面向对象技术导论 java程序设计大学教程 实验【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0 【实验目的】1. 理解线程的基本概念、优先级、生命周期等。2. 掌握线程的一般创建与使用方法(Thread类与Runnable接口)。3. 了解线程间的通信、多线程的同步等编程机制。【实验要求】1. 运行上课讲解的例子;2. 完成下列实验内容。【实验内容】一、读懂并执行下列程序,理解Java中的多线程机制。1. 运行下面的程序,理解用创建Thread子类的方法实现多线程。class Sim

2、pleThread extends Thread public SimpleThread(String str) super(str); public void run() for (int i = 0; i 10; i+) System.out.println(i + + getName(); try sleep(int)(Math.random() * 1000); catch (InterruptedException e) System.out.println(DONE! + getName(); public class TwoThreadsTest public static vo

3、id main (String args) new SimpleThread(Go to Beijing ).start(); new SimpleThread(Stay here!).start(); 问题:(1) 程序的运行结果和功能分别是什么?(2) 如果程序中去掉try-catch语句,程序是否仍能正常运行?(3) Thread子类是如何实现多线程机制的?(4) 如果希望执行三个线程,再显示“Go to Shanghai ”,程序如何修改?比较显示次序,是否相同。为什么会有这样的现象?答:1:运行结果:功能:创建两个线程并打印做检测2:去掉后程序能够正常运行但是运行的速度加快,即线程没

4、有了等待时间。3:在编写复杂程序时相关的类可能已经继承了某个基类,而Java不支持多继承,在这种情况下,便需要通过实现Runnable接口来生成多线程用到Thread类的构造方法public Thread(Runnable target); /构造一个新的线程对象,以一个实现Runnable接口的类的对象为参数。默认名为Thread-n,n是从0开始递增的整数。4:首先在函数TwoThreadsTest添加一个线程即是添加语句new SimpleThread(Go to Qinghai ).start();和System.out.println(“Go to Shanghai”);即可由于学校

5、的机器是四核的无法完成下面的操作!2. 运行下面的程序,理解用实现Runnable接口的方法实现多线程。/这是一个时钟Applet,它显示当前时间并逐秒进行更新。import java.awt.*;import java.applet.*;import java.util.*;public class Clock extends Applet implements Runnable Thread clockThread; public void start() if(clockThread=null) clockThread=new Thread(this,Clock); clockThrea

6、d.start(); public void run() while(clockThread !=null) repaint(); try clockThread.sleep(1000); catch(InterruptedException e) public void paint(Graphics g) Date now=new Date(); g.drawString(now.getHours()+;+now.getMinutes()+;+now.getSeconds(),5,10); public void stop() clockThread.stop(); clockThread=

7、null; 问题:(1) 在什么情况下一般要通过实现runnable接口实现线程机制?(2) 程序的运行结果和功能分别是什么?(3) Runnable接口是如何实现多线程机制的?(4) 程序中是通过什么方法如何实现逐秒更新显示时间的?答:(1)在编写复杂程序时相关的类可能已经继承了某个基类,而Java不支持多继承,在这种情况下,便需要通过实现Runnable接口来生成多线程(2)结果: 功能:该程序是一个时钟Applet,它显示当前时间并逐秒进行更新。(3)定义一个实现java.lang.Runnable接口的类,并在该类中定义Runnable接口的run()方法,同样,该run()方法是线程

8、执行的起点。(4)程序通过调用clockThread.sleep()方法通过控改变sleep()里面的内容来实现逐秒更新显示时间。3. 运行下面的程序,理解线程的同步。/程序使用同步块class Callme void call(String msg) System.out.print( + msg ); try Thread.sleep(1000); catch (InterruptedException e) System.out.println(Interrupted); System.out.println(); class Caller implements Runnable Str

9、ing msg; Callme target; Thread t; public Caller(Callme targ, String s) target = targ; msg = s; t = new Thread(this); t.start(); /同步调用call()方法 public void run() synchronized(target)/同步块 target.call(msg); class Java2 public static void main(String args) Callme target = new Callme(); Caller ob1 = new C

10、aller(target,Hello); Caller ob2 = new Caller(target,Synchronized); Caller ob3 = new Caller(target,World); /等待线程结束 try ob1.t.join(); ob2.t.join(); ob3.t.join(); catch(InterruptedException e) System.out.println(Interrupted); 问题:(1) 程序的运行结果和功能分别是什么?(2) 程序中如何实现线程的同步?(3) 去掉程序中的synchronized关键字,运行结果如何?答:1:

11、运行结果功能:创建三个线程,检测线程同步。2 碰到多个线程对同一资源进行访问的情况,这时,就需要协调: 每个对象都只有一个“锁”与之相连,利用多线程对其的争夺可实现线程间的互斥操作。当线程A获得了一个对象的锁后,线程B必须等待线程A完成规定的操作、并释放出锁后,才能获得该对象的锁,并执行线程B中的操作。利用synchronized首先判断对象的锁是否在,如果在就获得锁,然后就可以执行紧随其后的代码段;如果对象的锁不在(已被其他线程拿走),就进入等待状态,直到获得锁3:去掉关键字后无运行结果。运行结果为空,三个线程均不被执行。4. 运行下面的程序,理解线程间的通信。import java.lan

12、g.Runnable;import java.lang.Thread;public class DemoThread1 implements Runnablepublic DemoThread1() TestThread testthread1 = new TestThread(this,1); TestThread testthread2 = new TestThread(this,2); testthread2.start(); testthread1.start(); public static void main(String args) DemoThread1 demoThread1

13、 = new DemoThread1(); public void run() TestThread t = (TestThread) Thread.currentThread(); try if (!t.getName().equalsIgnoreCase(1) synchronized(this) wait(); while(true) System.out.println(thread+ t.getName()+ =+ t.increaseTime(); if(t.getTime()%10 = 0) synchronized(this) System.out.println(*chang

14、e thread*); this.notifyAll(); if ( t.getTime()=20 ) break; wait(); catch(Exception e)e.printStackTrace(); class TestThread extends Thread private int time = 0 ; public TestThread(Runnable r,String name) super(r,name); public int getTime() return time; public int increaseTime () return +time; 问题:(1) 程序的运行结果和功能分别是什么?(2) 程序是如何实现线程通信的?可否通过其他方法进行线程间的通信?(3) 程序中如果去掉notify();语句,程序运行结果会怎样?为什么?(4) synchronized(this);语句的作用是什么?如果去掉此语句,能否实现线程间的通信?为

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1