第5章 多线程 - 补充案例 联系客服

发布时间 : 星期四 文章第5章 多线程 - 补充案例更新完毕开始阅读b8317dca55270722182ef717

博学谷——让IT教学更简单,让IT学习更有效

第五章 补充案例

案例5-1 继承Thread类创建多线程

一、案例描述

1、 考核知识点

编 号:00105002

名 称:继承Thread类创建多线程

2、 练习目标

? 掌握如何通过继承Thread类实现多线程的创建。 ? 掌握Thread类中run()方法和start()方法的使用。

3、 需求分析

在程序开发中,会遇到一个功能需要多个线程同时执行才能完成的情况。这时,可以通过继承线程类Thread,并重写Thread类中的run()方法来实现。为了让初学者熟悉如何创建多线程,在案例中将通过继承Thread类方式创建线程,并实现多线程分别打印0~99的数字的功能。

4、 设计思路(实现原理)

1) 自定义一个类Demo,使其继承Thread类。

2) 在Demo类中重写run()方法,在run()方法内编写一个for循环,循环体内打印:“Demo:”+

当前循环次数。

3) 编写测试类Example01,在Example01类的main()方法中,创建一个Demo对象,并执行其

start()方法,接着编写一个for循环,循环体内打印:“main:”+当前循环次数。

二、案例实现

class Demo extends Thread { }

public class Example01{

public static void main(String[] args) {

Demo d = new Demo(); d.start();

for(int x=0; x<100; x++){ }

1

System.out.println(\

public void run() {

for (int x = 0; x < 100; x++) {

}

System.out.println(\

}

博学谷——让IT教学更简单,让IT学习更有效

}

}

运行结果如图5-1所示。

图5-1

运行结果

三、案例总结

1、通过继承Thread类,并重写Thread类中的run()方法可以实现多线程。

2、Thread类中,提供的start()方法用于启动新线程,线程启动后,系统会自动调用run()方法。 3、main()方法中有一条主线程在运行。

案例5-2 实现Runnable接口创建多线程

一、案例描述

1、 考核知识点

编 号:00105003

名 称:实现Runnable接口创建多线程

2、 练习目标

? 掌握如何通过实现Runnable接口方式创建多线程。

? 掌握如何使用Thread类的有参构造方法创建Thread对象。

3、 需求分析

在Java中只支持单继承,因此通过继承Thread类创建线程有一定的局限性,这时可以使用另一种方式,即实现Runnable接口来创建线程。通过这种方式需要在Thread(Runnable target)的构造方法中,传递一个实现了Runnable接口的实例对象。接下来在案例中将通过实现Runnable接口方式创建线程,并实现多线程分别打印0~99的数字的功能。

4、 设计思路(实现原理)

1) 自定义一个类Demo,使其实现Runnable接口。

2) 在Demo类中覆写run()方法,在方法编写一个for循环,循环体内打印:当前线程名称:+

当前循环次数。

3) 编写测试类Example02,在Example02类的main()方法中,创建一个Demo对象,利用Thread

(Runnable target)构造方法创建2个线程对象,分别命名为“蜘蛛侠”和“钢铁侠”,并执行线程对象的start()方法,同时编写for循环,循环内打印“main:”+当前循环次数。

2

博学谷——让IT教学更简单,让IT学习更有效

二、案例实现

class Demo implements Runnable { }

public class Example02 { }

public static void main(String[] args) { }

Demo d = new Demo();

Thread t1 = new Thread(d,\蜘蛛侠\Thread t2 = new Thread(d,\钢铁侠\t1.start(); t2.start();

for (int x = 0; x < 100; x++) { }

System.out.println(\

public void run() { }

for(int x=0; x<100; x++){ }

System.out.println(Thread.currentThread().getName()+\

运行结果如图5-2所示。

图5-2

运行结果

三、案例总结

1、可以把实现了Runnable接口并重写run()方法的实例对象,作为Thread有参构造方法的参数来创建多线程程序。 2、使用Thread类的构造方法Thread(Runnable target, String name)创建线程对象时,还可以给线程指定新名称。

3、思考一下:既然有了继承Thread类的方式,为什么还要有实现Runnable接口的方式?

a) 可以避免由于Java的单继承带来的局限性。在开发中经常碰到这样一种情况,就是使用一个已经继承了某一个类的子类创建线程,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么就只能采用实现Runnable接口的方式。

3

博学谷——让IT教学更简单,让IT学习更有效

b) 实现接口的方式,适合多个相同程序代码的线程去处理同一个资源的情况,把线程同程序代码、数据有效的分离,很好的体现了面向对象的设计思想。例如:一个售票程序继承了Thread类,在售票时启动了多个售票程序,但他们不是同一个对象,数据没有共享,这样就会出现票数重复出售的情况;而当售票程序实现Runnable接口后,多个线程运行同一个售票程序,实现了票数共享的好处。

案例5-3 设置后台线程

一、案例描述

1、 考核知识点

编 号:00105005 名 称:后台线程

2、 练习目标

? 了解后台线程的生命周期

? 掌握如何将线程设置为后台线程

3、 需求分析

默认情况下,新创建的线程都是前台线程,若想使前台线程变为后台线程,可以使用setDaemon(true)方法实现,为了让初学者熟悉后台线程,案例中将通过设置一个后台线程并演示后台线程和程序结束之间的关系。

4、 设计思路(实现原理)

1) 自定义一个类Watcher,使其实现Runnable接口。

2) 在Watcher类中覆写run()方法,在方法内编写一个for循环,循环体内打印:线程名称+循环

次数。

3) 编写测试类Example03,在Example03类的main()方法中,创建一个Watcher对象,利用Thread

(Runnable target)构造方法创建线程对象并命名,将线程设置为后台线程,执行该线程的start()方法,接着编写一个for循环,循环内打印循环次数。

二、案例实现

class Watcher implements Runnable { }

public class Example03 {

public static void main(String[] args) {

Watcher watcher = new Watcher(); Thread t = new Thread(watcher,\星矢\t.setDaemon(true);

4

public void run() { }

for (int x = 0; x < 1000; x++) { }

System.out.println(\我是\

+\守护者,\我在守护雅典娜\