多线程实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁波工程学院电信学院计算机教研室
实验报告
课程名称: Java 2 实验项目: 多线程实验 指导教师: **** 实验位置: 电信楼机房 姓 名: *** 学 号: **** 班 级: **** 日 期:
一、实验目的
1、掌握多线程编程的特点和工作原理;
2、掌握编写线程程序的方法
3、了解线程的调度和执行过程
4、掌握线程同步机理
二、实验环境
windows 记事本,java jdk 1.60版本,cmd 命令运行窗口
三、实验内容
实验一:
应用Java 中线程的概念写一个Java 程序(包括一个测试线程程序类TestThread ,一个Thread 类的子类PrintThread )。在测试程序中用子类PrintThread 创建2个线程,使得其中一个线程运行时打印10次“线程1正在运行”,另一个线程运行时打印5次“线程2正在运行
源程序:
public class A
{
public static void main(String args[])
{
Test1 A1;
Test2 A2;
A1=new Test1();
A2=new Test2();
A1.start();
A2.start();
}
}
class PrintThread extends Thread
{
}
class Test1 extends PrintThread
{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println("线程1正在运行!");
}
}
}
class Test2 extends PrintThread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println("线程2正在运行!");
}
}
}
运行结果:
实验二:
将上述程序用Runnable接口改写,并上机验证源程序public class D
{
public static void main(String args[])
{
Move move=new Move();
move.test1.start();
move.test2.start();
}
}
class Move implements Runnable
{
Thread test1,test2;
Move()
{
test1=new Thread(this);
test1.setName("线程1正在运行!");
test2=new Thread(this);
test2.setName("线程2正在运行!");
}
public void run()
{
if(Thread.currentThread()==test1)
{
for(int i=1;i<=10;i++)
{
System.out.println(test1.getName());
}
}
else
{
for(int i=1;i<=5;i++)
{
System.out.println(test2.getName());
}
}
}
运行结果:
实验三:
import java.awt.*;
import java.awt.event.*;
public class E
{ public static void main(String args[])
{ new FrameMoney();
}
}
class FrameMoney extends Frame
implements Runnable,ActionListener
{ int money=100;
TextArea text1,text2;
Thread 会计,出纳;
int weekDay;
Button start=new Button("开始演示");
FrameMoney()
{ 会计=new Thread(this);
出纳=new Thread(this);
text1=new TextArea(12,15);
text2=new TextArea(12,15);
setLayout(new FlowLayout());
add(start);
add(text1);
add(text2);
setVisible(true);
setSize(360,300);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{System.exit(0);
}
});
start.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{ if(!(出纳.isAlive()))
{ 会计=new Thread(this);
出纳=new Thread(this);
}
try
{ 会计.start();
出纳.start();
}
catch(Exception exp){}
}
public synchronized void 存取(int number) //存取方法
{ if(Thread.currentThread()==会计)
{ text1.append("今天是星期"+weekDay+"\n");
for(int i=1;i<=3;i++) //会计使用存取方法存入90元,存入30元,稍歇一下
{ money=money+number; //这时出纳仍不能使用存取