首页 理论教育 继承Thread类创建多线程-Java程序设计

继承Thread类创建多线程-Java程序设计

时间:2023-11-01 理论教育 版权反馈
【摘要】:演示通过继承Thread类创建多线程。步骤2:定义一个线程需要完成的存款任务,该任务采用继承Thread类实现。图6-3继承Thread类的存钱任务SaveMoneyTask1类在Save Money Task1类中定义一个Bank Account类成员变量,通过构造方法传入并保存需要操作的银行账户对象。有了线程对象t1,并不能自动启动该线程,线程对象t1调用继承自Thread类的start方法启动线程,执行该线程对象的run方法。

继承Thread类创建多线程-Java程序设计

通过继承Thread类来创建并启动多线程的一般步骤如下:

(1)定义Thread类的子类,并重写Thread类的run()方法,在run()方法中加入线程需要执行的代码,完成线程任务。run()方法通常又称为线程的执行体。

(2)创建该Thread子类的实例,即创建一个线程对象。

(3)线程对象通过调用继承自Thread类的start()方法来启动线程。

【例6-1】

演示通过继承Thread类创建多线程

下面通过一个银行存款案例来演示。

步骤1:新建一个chapter6项目,在src目录下新建一个包cn.linaw.chapter6.demo01,在包里定义一个简易的银行账户类Bank Account,如图6-2所示。

图6-2 银行账户类Bank Account

Bank Account中定义了两个成员变量、一个带参构造方法,以及相关的getter和setter。

步骤2:定义一个线程需要完成的存款任务(Save Money Task1类),该任务采用继承Thread类实现。为了简化,存款任务就是要操作一个给定的银行账户对象,对其账户存2次钱,每次存1元。Save Money Task1类具体实现如图6-3所示。

(www.xing528.com)

图6-3 继承Thread类的存钱任务SaveMoneyTask1类

(1)在Save Money Task1类中定义一个Bank Account类成员变量,通过构造方法传入并保存需要操作的银行账户对象。

(2)为了更好地观察效果,在每次存钱后调用Thread.sleep(500),该方法声明为public static void sleep(long millis)throws Interrupted Exception,作用是在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),进入阻塞状态,直到休眠期满后进入就绪状态,等待被再次调度。

步骤3:在测试类Save Money Task1Thread Test的main主线程中创建一个存钱线程,如图6-4所示。

图6-4 创建并启动线程

(1)程序第4行创建一个Bank Account对象x,程序第5行创建了一个线程对象,传入Bank Account对象x,同时用Thread类型引用变量t1指向该线程对象(多态的体现)。

(2)有了线程对象t1,并不能自动启动该线程,线程对象t1调用继承自Thread类的start方法启动线程,执行该线程对象的run方法。新创建的线程和当前线程并发执行。注意:重复启动同一个线程是非法的。

(3)Thread类public final String get Name()方法用于返回线程的名称,自动生成的名称格式为“Thread-”+n,其中n为整数。可以通过Thread类的public final void set Name(String name)方法设置线程的名称。

(4)Thread类public static Thread current Thread()方法用于返回对当前正在执行的线程对象的引用。

(5)main线程是主线程,由JVM启动,不是通过线程对象产生的。当main线程和新建的线程开始并发执行时,顺序是不确定的,从本次结果来看,main线程先执行完,然后才是Thread-0线程结束。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈