线程常用方法: (1)线程休眠sleep (2)线程让步yield (3)join方法
线程停止:(1)设置标志位 (2)调用stop() 已经被废弃因为会产生不完整数据 (3)interrupt()
线程的优先级:设置 、取得优先级、最高/中等/最低优先级
守护线程:设置、判断
1.线程常用方法
首先看看下面的图,看完我们详细说
(1)sleep()线程休眠 不会释放锁
指的是让线程暂缓执行一下,等到预计时间后在恢复执行 。线程休眠会立即交出CPU,且不会释放对象锁
(2)yield()线程让步 不会释放锁
暂停当前正在执行的线程,并执行其他线程 。不会释放锁(只能让拥有相同优先级的线程获取CPU)当前线程不会立即交出 CPU,交出时间由系统调度
(3)join()线程等待 会释放锁
若一个线程1需要等待另一个线程2执行完毕之后再恢复执行,可以在线程1中调用线程2的join()在哪里调用,那个线程阻塞,等待线程执行完毕再恢复执行
2.线程停止
(1)设置标志位 (无法处理线程阻塞时停止的问题)
(2)调用Thread类提供的stop方法,强行关闭线程 (本方法已经不推荐使用了,因为会产生不完整数据)
(3)调用Thread类提供的interrupt()方法
a.若线程中没用使用类似sleep/wait/join时,
调用此线程对象的interrupt方法并不会真正中断线程,只是简单的将线程状态置为interrupt而已,我们可以根据此状态经一 步确定如何处理线程。isInterrupt()可以检测是否为中断状态
b.若线程中调用了阻塞方法如:sleep() wait() join()
此时再调用线程的interrupt时会抛出InterruptedException,同时线程状态还原(isInterrupted = false)
3.线程优先级
1.设置线程的优先级:public void setPriority(1~10)
取得线程的优先级:public voidgetPriority()
2.优先级的级别 (主线程优先级别就是5)
最高优先级:public final static int MAX_PRIORITY = 10;
中等优先级:public final static int NORM_PRIORITY = 5;
最低优先级:public final static int MIN_PRIORITY = 1;
注意: 1.线程的优先级越高,越有可能先执行
2.若一个线程中创建了子线程,默认子线程与父线程的优先级别相同
4.守护线程 (垃圾回收线程)
线程分类:用户线程、守护线程
我们默认创建的线程都是用户线程,包括主线程
守护线程:它是为陪伴线程,只要JVM中存在任何一个用户线程没有终止,守护线程就一直在工作,当JVM最后一个用户线程退出,守护线程也自动退出
设置方式:通过setDaemon(true)将线程对象设置为守护线程