JAVA 线程例题Word下载.docx
《JAVA 线程例题Word下载.docx》由会员分享,可在线阅读,更多相关《JAVA 线程例题Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
【实验13-1】使用继承Thread类方法设计多线程程序,线程AThread计算并输出1-1000之内的素数;
线程BThread输出200个随机数。
程序保存为Experiment13_1.java。
主要程序代码提示:
classAThread//计算素数的线程
{AThread(Strings)
{super(s);
//调用超类的构造方法
}
publicvoidrun()
{Stringname=this.getName();
//获取线程名
for(inti=2;
i<
=1000;
i++)
{if(prime(i))//是素数,显示
{System.out.println(name+"
输出素数:
"
+i);
//为看清运行结果,可在此处做适当延时
}
}
booleanprime(intn)//判断n是否为素数的方法
{……//返回逻辑值
}
classAThread//生成随机数的线程
{……
publicclassExperiment11_1
{publicstaticvoidmain(String[]args)
{AThreada=;
//创建素数线程对象a
BThreadb=;
//创建随机数线程对象b
;
//启动线程a
//启动线程b
【实验13-2】同上题,要求使用实现Runnable接口方法设计多线程程序。
程序保存为Experiment13_2.java。
classCThread//计算素数的线程
{publicvoidrun()
{……//输出1-1000之内素数
classDThread//生成随机数的线程
{……//生成并输出随机数
publicclassExperiment13_2
{Threadc=;
//创建素数线程对象c
Threadd=;
//创建随机数线程对象d
//启动线程c
//启动线程d
选做题:
【实验13-3】修改【实验13-1】或【实验13-2】程序,要求在同一个线程类中能够分别实现素数的判定和随机数生成显示两个线程。
程序保存为Experiment13_3.java。
方法1:
线程类继承自Thread:
classThreadAextendsThread
{ThreadA(Strings)
{Stringname=;
//获取线程名
if(name.)//如果是素数线程
{……//输出显示素数
elseif(name.)//如果是随机数线程
{……//输出显示随机数
主程序创建线程对象并启动线程:
ThreadAa=newThreadA("
素数"
);
ThreadAb=newThreadA("
随机数"
b.start();
a.start();
方法2:
线程类实现Runable接口:
classThreadBimplementsRunnable
{Threada,b;
ThreadB()
{a=;
a.setName("
素数线程"
b=;
b.setName("
随机数线程"
{if(==a)//如果当前是素数线程
elseif(==b)//如果当前为随机数线程
ThreadBt=newThreadB();
//创建线程类对象
t.a.start();
//启动素数线程a
t.b.start();
//启动随机数线程b
实验要点:
完成本实验时,注意以下几个问题:
1、创建线程类有继承Thread类和使用Runnable接口两种方法。
2、创建并应用继承自Thread的线程类,方法步骤是:
①创建线程类:
classMyThreadextendsThread{…}
②重写Thread类的run()方法:
voidrun(){……}
③在主程序中创建线程类的对象:
MyTreadt=newMyTread();
④启动线程:
t.start();
3、创建并应用使用Runnable接口线程类,方法步骤是:
classThreadClassimplementsRunnable{…}
②重写Runnable接口的run()方法:
Threadt=newThread(newThreadClass());
实验过程记录
(学生写出实验步骤及中间的结果与现象,在实验中做了什么,怎么做,发生的现象和中间结果)
实验结果分析与总结
1、程序运行结果或结果截图:
实验1:
实验二:
实验三:
2、你在实验过程中遇到的问题与解决方法:
3、实验过程中的发现与收获,未解决或需进一步解决的问题:
作业与问题(答题内容请用蓝色字体)
1、程序、进程、线程之间是什么关系?
程序是代码的集合,进程是程序的一次执行,线程是进程的组成单位。
2、创建线程类的方法有那些?
创建线程有两种方法:
继承Thread类和实现Runnable接口
3、线程如何启动?
如何终止?
启动线程的时候用一个判断语句锁定整个run()方法就可以
4、线程的等待和挂起有什么区别?
进程在外存中,并且等待某件事情发生
。
指导老师评阅意见
指导老师:
年月日
填写内容时,可把表格扩大。
附:
实验源程序代码
实验一:
publicclassE13{
publicstaticvoidmain(String[]args)
{
AThreada=newAThread("
线程a"
BThreadb=newBThread("
线程b"
a.start();
b.start();
classBThreadextendsThread
{
BThread(Strings)
publicvoidrun()
Stringname=this.getName();
for(inti=0;
i<
200;
i++)
System.out.println(name+"
输出随机数:
+Math.random());
classAThreadextendsThread
AThread(Strings)
for(inti=2;
=1000;
{
booleansushu=true;
intj=2;
while((j<
=i/2)&
sushu)
{
if(i%j==0)
sushu=false;
j++;
if(sushu)System.out.println(name+"
+j);
publicclassE13
Threadc=newThread(newCThread(),"
线程c"
Threadd=newThread(newDThread(),"
线程d"
c.start();
d.start();
classDThreadimplementsRunnable
for(inti=0;
System.out.println(Thread.currentThread().getName()+"
classCThreadimplementsRunnable
if(sushu)System.out.println(Thread.currentThread().getName()+"
classThreadAextendsThread
ThreadA(Strings)
super(s);
Stringname=getName();
if(name.equals("
))
for(inti=2;
booleansushu=true;
intj=2;
while((j<
{
if(i%j==0)
sushu=false;
j++;
}
if(sushu)System.out.println(j+"
"
elseif(name.equals("
System.out.println(Math.random()+"
publicstaticvoidmain(String[]args)
ThreadAa=newThreadA("
ThreadAb=newThreadA("
publicclassE13
ThreadBt=newThreadB();
t.a.start();
t.b.start();
classThreadBimplementsRunnable
Threada,b;
ThreadB()
a=newThread(this);
b=newThread(this);
if(Thread.currentThread()==a)
elseif(Thread.currentThread()==b)
System.out.print(Math.random()+"