欢迎来到我的博客

将来的你一定会感激现在拼搏的自己

JavaSE基础day21 Thread类


 

Thread

获取线程名称

1、getName()

获取线程名称

2、特点:

(1)如果线程没有给一个特定的名字,自己默认名称:Thread-x

      x0开始依次往后递增

代码

 

 

设置线程名称

1、setName(String name) :给线程对象设置名称

2、Thread(String name) :通过构造给线程命名

 

3、Thread(Runnable target, String name) :在接收一个任务的同时给线程命名

代码

 

 

 

获取线程对象

1、方法:currentThread()

2、特点:

(1)该方法是静态方法,使用类名直接调用即可

 

(2)该方法返回的对象并不是固定的线程对象,以后哪一条执行执行该方法,返回对应的线程对象。

 

代码

 

 

 

 

练习

1、获取main线程的线程名称

 

2、获取垃圾回收线程名称

 

代码

 

 

 

 

线程休眠

1、Thread.sleep(long time):让执行这段代码的线程休息一会

2、注意:

(1)该方法是静态方法,参数是一个毫秒值,表示线程休眠的时间

(2)哪一个线程执行该方法,就让哪一个线程休息

(3)如果在一个非重写方法中使用sleep,可以选择声明异常也可以选择处理异常

(4)如果在一个重写的方法中使用sleep,只能处理异常不能声明异常

        父类或者接口中的方法没有异常的声明,在重写时不能声明

(5)将来调用sleep方法的线程,不一定是执行该方法的线程

 

(6)使用interrupt强制唤醒某一个线程,一旦线程的休眠被唤醒之后,就会抛出线程中断异常。

 

代码

 

 

 

 

 

 

 

 

 

 

守护线程

1、概念:保护其他线程能够正常运行的线程就是守护线程。

2、方法:

setDaemon(boolean on) :将当前线程对象设置为指定线程,参数为true为守护线程否则为非守护线程。

isDaemon():判断当前对象是否是一个守护线程

3、特点:

(1)在线程种有两类分支:

     第一种:守护线程(后台线程)用来保护其他线程的线程

     第二种:非守护线程(用户线程)受保护的线程

(2)main线程以及自己定义的线程都默认为非守护线程

(3)守护线程会随着非守护线程的结束而结束

(4)如果进程中有很多非守护线程,但是只有一条守护线程,那么只要存在一条非守护,守护线程就要一直守护,如果所有的非守护全部结束,守护线程才跟着结束

 

 

代码

 

 

 

 

练习

(1)判断main线程是否是一个守护线程:不是

(2)判断垃圾回收线程是否是一个守护线程:是

设置线程优先级

1、线程的优先级:

定义的每一条线程都有一个默认的优先级,默认的优先级都是相同的5,如果线程的优先级都相同,那么每次被cpu执行的几率都是相同;如果线程的优先级高,被cpu先执  行的几率高,如果线程的优先级低,被cpu先执行的几率低

2、设置优先级的方法:

setPriority(int newPriority) :设置线程优先级

10:最高

1:最低

3、静态常量:

static int MAX_PRIORITY   10

线程可以拥有的最大优先级。

static int MIN_PRIORITY   1

线程可以拥有的最小优先级。  

static int NORM_PRIORITY   5

分配给线程的默认优先级。

 

posted @ 2022-04-02 19:47  晴天般的微  阅读(77)  评论(0)    收藏  举报