177414310张强第11次多线程试验报告
博学谷——让 IT 教学更简单,让 IT 学习更有效 第五章第五章 多线程多线程 实验实验5-15-1 继承继承 ThreadThread 类创建多线程类创建多线程 一、实验描述一、实验描述 1、 考核知识点考核知识点 名 称:继承 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) { } 1 Demo d = new Demo(); d.start(); for(int x=0; x100; x++){ } System.out.println(“main:“+x); public void run() { for (int x = 0; x 100; x++) { } System.out.println(“Demo:“+x); } 博学谷——让 IT 教学更简单,让 IT 学习更有效 } 运行结果如图 5-1 所示。 图5-1运行结果 三、实验总结三、实验总结 1、通过继承 Thread 类,并重写 Thread 类中的 run()方法可以实现多线程。 2、Thread 类中,提供的 start()方法用于启动新线程,线程启动后,系统会自动调用run()方法。 3、main()方法中有一条主线程在运行。 实验实验5-25-2 实现实现 RunnableRunnable 接口创建多线程接口创建多线程 一、实验描述一、实验描述 1、 考核知识点考核知识点 名 称:实现 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: ”+当前循环次数。 二、实验实现二、实验实现 class Demo implements Runnable { public void run() { 2 博学谷——让 IT 教学更简单,让 IT 学习更有效 } 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(“main:“ + x); } for(int x=0; x100; x++){ } System.out.println(Thread.currentThread().getName()+“:“+x); 运行结果如图 5-2 所示。 图5-2运行结果 三、实验总结三、实验总结 1、可以把实现了 Runnable 接口并重写 run()方法的实例对象,作为 Thread 有参构造方法的参数来创 建多线程程序。 2、 使用 Thread 类的构造方法 Thread(Runnable target, String name)创建线程对象时, 还可以给线程指定 新名称。 3、思考一下:既然有了继承Thread 类的方式,为什么还要有实现Runnable 接口的方式? a) 可以避免由于 Java 的单继承带来的局限性。在开发中经常碰到这样一种情况,就是使用一个 已经继承了某一个类的子类创建线程, 由于一个类不能同时有两个父类, 所以不能用继承 Thread 类的方式,那么就只能采用实现Runnable 接口的方式。 b) 实现接口的方式, 适合多个相同程序代码的线程去处理同一个资源的情况, 把线程同程序代码、 数据有效的分离,很好的体现了面向对象的设计思想。例如:一个售票程序继承了Thread 类,在售票 时启动了多个售票程序, 但他们不是同一个对象, 数据没有共享, 这样就会出现票数重复出售的情况; 而当售票程序实现 Runnable 接口后,多个线程运行同一个售票程序,实现了票数共享的好处。 3 博学谷——让 IT 教学更简单,让 IT 学习更有效 实验实验5-35-3 设置后台线程设置后台线程 一、实验描述一、实验描述 1、 考核知识点考核知识点 名 称:后台线程 2、 练习目标练习目标 了解后台线程的生命周期 掌握如何将线程设置为后台线程 3、 需求分析需求分析 默认情况下,新创建的线程都是前台线程,若想使前台线程变为后台线程,可以使用 setDaemon(true)方法实现,为了让初学者熟悉后台线程,实验中将通过设置一个后台线程并演示 后台线程和程序结束之间的关系。 4、 设计思路(实现原理)设计思路(实现