线程的操作
线程的挂起及恢复
什么是线程的挂起?
线程的挂起操作实质上是让线程进入“不可执行”的状态下,在这个状态下,CPU不会给线程分配时间片,以达到让线程暂停当前的任务。
线程被挂起后,可以通过唤醒线程来让它继续运行
为什么要挂起线程
为了避免资源的浪费。当我们不看电视的时候,就把电视关掉,这样是为了省电,同理,当自己当前状况不用线程的时候就将其挂起,暂停它当下的状态,以达到方便使用节约资源的目的
如何挂起线程?
suspend():挂起线程,已废弃,原因是挂起后不能释放资源,而且不易控制,资源占用进而会引发死锁
resume():和上面的suspend()方法共同使用,以唤醒线程,但是因为和suspend()方法绑定所以一起被废弃了
wait():线程挂起,放弃现有的锁(释放资源),进入等待状态
notify():随机唤醒线程,让唤醒的线程去占用资源执行任务
notifyAll():唤醒全部线程,让所有线程抢占资源
线程的中断
怎么去中断一个线程的执行?
stop():已废弃,过于强力,一调用就立刻终止
interrupt():可以自行定义,用来判断是否可以继续执行
线程的优先级
线程的重要性决定了线程的优先级,我们在编程中可以为线程设置优先级来决定这个线程的执行,优先级高的线程,CPU会多分配一些时间片,优先级低的少分配一下时间片,使其执行靠程序开发来决定,所以当线程堵塞时,优先级高的线程会优先执行,但是这并不表示优先级低的线程就不会执行,只不过比优先级低的线程执行的机会小。比如说,线程1优先级最高,线程2优先级最低,同时执行循环输出名字时线程1的数量明显比线程2多,但是线程2依然存在,只是相对而言数量较小。
线程的优先级可以设置为1-10,超出这个界限就会报错,源码中有三个优先级常量,MIN_PRIORITY=1、NORM_PRIORITY=5、MAN_PRIORITY=10,数值越高优先级越高,默认为5
public static void main(String[] args) {
Thread thread = new Thread();
//设置线程优先级
thread.setPriority(Thread.MAX_PRIORITY);
}
守护进程
什么是守护线程?
相对于用户线程,相当于整个程序中用户线程的守护者,执行后直到最后一个非守护线程结束才会随着jvm一起退出。
注意:
1.因其不可控,所以尽量不要用
2.不在守护线程中进行读写操作,执行逻辑
public static void main(String[] args) {
Thread thread = new Thread();
//守护线程默认关闭,开启需要为true
thread.setDaemon(true);
//守护线程要在线程开启之前开启,否则会报错
thread.start();
}