广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室 2011 年 11月 日学院 实验课程名称 实验项目名称 计算机科学与教育软件 年级/专业/班 姓名 学号 成绩 指导老师 JAVA语言实验 实验六:多媒体与多线程处理 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的
(1)理解线程的概念;
(2)了解线程的状态和生命周期; (3)学习继承Thread 类来创建线程; (4)使用Runnable 接口。
(5)学习Runnable 接口在Applet 程序中的使用; (6)掌握Runnable 接口实现多线程的优点; (7)加深对Applet 中的几个常用方法的理解。 (8)理解线程同步的含义;
(9)掌握synchronized 同步方法与synchronized 同步语句的用法; (10)学会使用Thread Group 控制线程。 (11)理解线程的挂起与恢复的概念; (12)掌握wait()与notify()方法的使用。 (13)了解动画的原理;
(14)进一步了解多线程概念;
(15)运用Java 的多线程实现动画的应用。
(16)了解图像的装载、显示和修改显示的大小; (17)了解Image 类的常用的方法;
(18)了解ImageIcon 类的构造方法和常用的方法。 (19)熟练掌握图像的装载、显示; (20)了解和掌握双缓冲技术。
二、实验内容
1、本实验是要设计一个包含多线程运行的程序,在主程序中依次创建4 个线程,然后按顺序启动这4 个线程,每个线程在运行时所执行的动作都是先睡眠sleep 一会儿,醒来之后再继续执行,在这个过程中注意观察线程是如何调度运行的。
2、在这个实验中要设计一个能显示时间的 Applet 程序,要完成这个实验,学生应对Applet 程序有基本的了解,我们会先运行一个有些错误的程序,然后在分析错误的原因之后,逐步修改以得出正确的程序。
3、本实验要用程序模拟一个银行账户存款的过程。程序中会有多个线程同时对同一个银行账户进行操作,每个线程的操作都按相同的步骤进行,即先查出该账户当前的余额,在此基础上加1,然后又把新余额写回到账户上,这样连续执行若干次,最后账户上的余额就会累加成一个新余额值。由于银行账户是临界资源,一次只能由一个线程完成读写操作,因此必
须处理好线程之间的同步关系。该实验包括两个练习程序,一个是没有实施线程同步的程序,另一个则是实施了线程同步的程序,分别运行这两个程序,可以看出线程同步的作用。 4、编写一个 Applet 小应用程序能够显示时间,当用户最小化Applet 时,程序会被挂起,当还原Applet 时,程序又会恢复执行,同时Applet 中应显示挂起和恢复的时间。程序运行的效果如图所示。
5、设计一个文字显示面板,文字可以在面板上进行滚动显示。本实验中有两个练习:一个是通过Thread 来实现动画时间问隔的设置;另一个是通过Timer 来实现对动画时间间隔的制定。通过这两个练习,了解动画制作的基本原理和过程。
6、设计一个幻灯片程序,通过装载一系列的图片,将这些图片通过幻灯片的形式显示出来。在显示的过程中可以更改图片的大小。
7、利用一个 Image 类和线程,将一幅图片制作出它的水中倒影,并能显示水的波纹。
三、实验设备
Windows XP JAVA JDK 6.0
四、实验程序
//1.FourThreads.java public class FourThreads { }
class MyThread extends Thread {
public void run() {
// 让线程进入休眠状态,休眠指定的时间 try {
System.err.println(getName() + \将休眠\ + sleepTime + \毫秒\);
private int sleepTime;
public MyThread(String name) { }
super(name);
// 设置随机时间在0~5秒之间
sleepTime = (int) (Math.random() * 5001); public static void main(String[] args) {
MyThread thread1 = new MyThread(\); MyThread thread2 = new MyThread(\); MyThread thread3 = new MyThread(\); MyThread thread4 = new MyThread(\); System.err.println(\准备启动线程...\); thread1.start(); thread2.start(); thread3.start(); thread4.start();
System.err.println(\子线程已全部启动,主线程结束\\n\); }
}
}
Thread.sleep(sleepTime); exception.printStackTrace();
} catch (InterruptedException exception) {
System.err.println(getName() + \结束休眠\); }
//3.AccountWithoutSync.java public class AccountWithoutSync { }
class Account {
public int getBalance() { private int balance = 0;
class PayInThread extends Thread { }
public void run() { }
int balance;
balance = bank.getBalance() + 1; try { }
bank.setBalance(balance);
Thread.sleep(10); System.out.println(ex);
} catch (InterruptedException ex) {
public AccountWithoutSync() { }
for (int i = 0; i < 100; i++) { }
thread[i] = new Thread(new PayInThread()); thread[i].start();
public static void main(String[] args) {
AccountWithoutSync test = new AccountWithoutSync();
System.out.println(\最后存款是: \ + test.bank.getBalance()); }
private Thread[] thread = new Thread[100]; private Account bank = new Account();
}
}
return balance;
public void setBalance(int balance) { }
this.balance = balance;
//4.SuspendResumeApplet.java import java.awt.Graphics; import java.util.Calendar; import javax.swing.JApplet;
public class SuspendResumeApplet extends JApplet implements Runnable {
public synchronized void resumeThread() {
if (suspendFlag) {
suspendFlag = false; notify();
resumeTime = Calendar.getInstance();
public void stop(){
suspendThread(); suspendTime = time;
sushours = suspendTime.get(Calendar.HOUR);
susmins=suspendTime.get(Calendar.MINUTE); // 代码2 获取分钟 public void start() { }
resumeThread(); public void init() {
suspendFlag = false;
appletThread = new Thread(this); Thread appletThread; boolean suspendFlag;
Calendar time, suspendTime, resumeTime;
int hours, mins, secs, sushours, susmins, sussecs, rehours, remins,
resecs;
appletThread.start();//代码1 //启动线程appletThread }
sussecs=suspendTime.get(Calendar.SECOND); //代码3 获取表 }
}
}
rehours = resumeTime.get(Calendar.HOUR); remins = resumeTime.get(Calendar.MINUTE); resecs = resumeTime.get(Calendar.SECOND);
private synchronized void waitForNotificationToResume() throws InterruptedException { }
public synchronized void suspendThread() { }
public void run() { }
public void paint(Graphics g) {
super.paint(g);
g.drawString(\当前时间:\ + String.valueOf(hours) + \:\
+ String.valueOf(mins) + \:\ + String.valueOf(secs), 50,
while (true) { }
try { }
time = Calendar.getInstance(); hours = time.get(Calendar.HOUR); mins = time.get(Calendar.MINUTE); secs = time.get(Calendar.SECOND); System.out.println(\秒表:\ + secs); repaint();
Thread.sleep(500);//代码4 //线程休眠500毫秒 waitForNotificationToResume(); exception.printStackTrace();
suspendFlag = true; while (suspendFlag)
wait();
} catch (InterruptedException exception) {
50);
g.drawString(\挂起时间:\ + String.valueOf(sushours) + \:\
+ String.valueOf(susmins) + \:\ + String.valueOf(sussecs), 50,80); + String.valueOf(remins) + \:\ + String.valueOf(resecs), 50,100);
g.drawString(\恢复时间:\ + String.valueOf(rehours) + \:\
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库java实验报告6在线全文阅读。
相关推荐: