版权声明:LemonSnm https://blog.csdn.net/LemonSnm/article/details/90083978
1、守护线程
public final void setDaemon(boolean on):
将此线程标记为守护线程或者用户线程 。当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。
true:为守护线程,false为用户进程。一般默认为用户进程
通俗的讲:守护线程好比辅助,它负辅助用户线程,当用户线程都结束了,要辅助也就没用了,JVM就会关闭
线程分为两种:
守护线程、用户线程。
当进程中没有用户线程时,JVM会退出
代码示例:
package com.lemon;
public class ThreadDemo3 {
public static void main(String[] args) throws InterruptedException {
MyRunnable4 r = new MyRunnable4();
Thread t = new Thread(r);
//线程分为两种:守护线程和用户线程。当进程中没有用户线程时,JVM会退出
t.setDaemon(true); //把线程设置为守护线程
t.start(); // 等待CPU调度 启动线程
for (int i = 0; i < 50; i++) {
System.out.println("Main:" + i);
Thread.sleep(200); //线程休眠200毫秒
}
}
}
class MyRunnable4 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("MyRunnable4:" + i);
try {
Thread.sleep(500); //线程休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
其他方法:
MyRunnable4 r = new MyRunnable4();
Thread t = new Thread(r);
isDaemon()); //判断是否为守护线程
System.out.println(t.isDaemon()); //判断是否为守护线程
yield() :让出本次CUP执行的时间片
if(i %5==0){
Thread.yield(); //让出本次CUP执行时间片
}
setName改变线程的名称,使之与参数name相同:
t.setName("MyThread");
isAlive()判断线程是否处于活动状态
System.out.println(t.isAlive()); //判断线程是否处于活动状态
t.setPriority // 设置优先级
优先级高:可以提高该线程抢占CPU时间片的概率
Thread.MAX_PRIORITY 大
Thread.MIN_PRIORITY 小
Thread.NORM_PRIORITY 默认
不设置就是默认
//优先级高:可以提高该线程抢占CPU时间片的概率
t.setPriority(Thread.MAX_PRIORITY); // 最大优先级