java 实验八 多线程 实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八多线程

实验目标:

(1)掌握使用Thread的子类创建线程;掌握实现Runable接口来实现多线程;

(2)掌握线程之间的数据共享;

(3)掌握线程之间的同步方法;

(4)掌握线程之间的通信方法。

实验任务:

1、选择答题(请将答案标成红色,如(AB)):

1.下面关于线程的说法正确的是( ABD )。

A)Java 支持多线程机制。

B)一个线程创建并启动后,它将执行自己的run()方法,如果通过派生Thread类实现多线程,则需要在子类中重新定义run()方法,把需要执行的代码写run()方法中;如果通过实现Runnable接口实现多线程,则要编写run()方法的方法体。

C)要在程序中实现多线程,必须导入Thread类: import ng.Thread;

D)一个程序中的主类不是Thread的子类,该类也没有实现Runnable接口,则这个主类运行是不能控制主线程的休眠。

2.如果程序中创建了两个线程,一个的优先级是Thread.MAX_PRIORITY,另一个的优先级是正常的默认优先级,下列陈述哪个是对的?( A)

A)正常优先级的线程不运行,直到拥有最高优先级的线程停止运行。

B)即使拥有最高优先级的线程结束运行,正常优先级的线程也不会运行。

C)正常优先级的线程优先运行。

D)上述说法都不对。

3.下面哪个是Runnable接口中的抽象方法( D)?

A)start B)stop C)yield D)run

4.编译下面的程序,得到的结果是( C)。

public class A implements Runnable {

public void run () {

System.out.println("OK.");

}

public static void main (String[] args) {

Thread Th=new Thread (new A());

Th.start();

}

}

A)程序不能编译,产生异常。

B)程序能编译运行,但没有任何结果输出。

C)程序能编译运行,输出结果:OK.。

D)上面说法都不对。

5.为什么处于激活状态的线程可能不是当前正在执行的线程?( BCD )

(备注:激活(unblock):如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。)

A)因为已经执行完run()方法。B) 线程正在等待键盘输入。

C)该线程调用了wait()方法。D)该线程正在休眠状态。

2. 下面是一个多线程的程序:

public class SimpleThread 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((long)(Math.random() * 1000));

} catch (InterruptedException e) {}

}

System.out.println("DONE! " + getName());

}

}

public class TwoThreadsTest {

public static void main (String[] args) {

new SimpleThread("Jamaica").start();

new SimpleThread("Fiji").start();

}

}

(1)输入该程序并运行之,体会多线程的程序的编写方法。输入该程序后执行结果截图如下:

(2)将该程序该为通过实现Runnable接口的方式实现多线程。改为Runnable后程序代码如下:

package zi;

public class Ex8_2_2{

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("Jamaica");

test2=new Thread(this);

test2.setName("Fiji");

}

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());

}

}

}

}

运行结果截图如下:

3,课本270页课后习题第4题。

下面给出一个范例(只供参考):

(1)这个程序运行就是一个进程,根据要求要设计三个线程,首先给出一个协助三个线

相关文档
最新文档