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)
评论()
收藏
举报