Thread类的常见方法--Java进阶day15

1.线程名相关方法

[1].getName

使用该方法获取线程名

该方法来源于Thread类,我们写的类继承了Thread,可以直接使用该方法,获取到的是默认线程名

[2].setName

使用该方法设置线程名

应该在外面设置线程名,而不是在类的里面,因为之后可能会有多个MyThread的对象,如果设置在类里则都为一个线程名

--继承Thread类时,在Thread构造里设置线程名

Thread构造方法里可以接收线程名的字符串,从而直接赋值

需要注意的是,我们自己写的类没有带参构造,需要额外生成带参构造方法才可以设置线程名

右键generate,点击constructer,选择带参构造

将字符串传入我们写的带参构造,然后通过super将字符串传给父类进行封装,设置线程名

[3]currentThread

使用该方法获取当前线程对象

当我们使用的是第二种或是第三种开启线程的方式时,父类是object,不是Thread,也就无法使用对应的方法

我们可以使用currentThread方法,获取到此时的线程对象,有了线程对象,就可以调用线程的方法

解释 :当使用start后,开启线程,产生线程对象,并且自动调用run方法,currentThread获取线程对象,调用线程方法

线程名依旧在外面设置,主方法也可以获取线程名,并且自带线程名

--实现Runnable接口时,通过Thread构造设置线程名

Thread构造方法可以在接收Runnable实现类的同时,设置线程名

第三种方法开启线程,依旧使用上述流程

使用currentThread获取线程对象,然后再使用getName获取线程名

可以在t1,t2的下面使用setName设置线程名,也可以根据Thread的构造方法,直接设置线程名

有线程对象,就可以直接通过线程对象来调用方法

2.线程休眠方法

向括号中传入毫秒值,以此让线程休眠对应的毫秒值时间

输出一个倒计时,就休眠一秒后,再进行输出

3.线程优先级方法

说优先级之前,要先了解线程的调度方式

线程有两种调度方式:

一种是抢占式调度,也就是线程互相之间抢cpu,抢到就是谁的。

另一种是非抢占式调度,每个线程按顺序轮流来使用cpu

java线程使用的就是抢占式调度,因此,谁的优先级更高,谁就更容易抢到cpu


之前一直都用的类来开启线程,也可以使用匿名内部类开启线程

实现的是Runnable,所以不能直接获取线程名

写好两个线程后,我们先获取线程的优先级,看默认是多少

优先级范围是1~10,默认优先级为5。接下来,设置t1和t2的优先级

优先级高并不决定谁先执行完毕,优先级高只是提高线程抢到cpu的概率

4.设置守护线程方法

当b线程被设置为a线程的守护线程时,当a线程结束后,b线程也会随之结束

设置两条线程,A执行20次,B执行200次,然后再设置B为守护线程,开启线程 结果如下图

很明显,当A执行完后,B也随之慢慢结束,B并未执行够200次

posted @ 2025-05-07 17:50  直実  阅读(40)  评论(0)    收藏  举报