Thread类
获取线程名称
1、getName() :
获取线程名称
2、特点:
(1)如果线程没有给一个特定的名字,自己默认名称:Thread-x
x从0开始依次往后递增
代码
设置线程名称
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
分配给线程的默认优先级。