线程优先级
线程是存在优先级的,其范围是 1 ~ 10,数字越大,优先级越高,意味着先执行的概率越大,注意,优先级越高不等于先执行,只是先执行的概率越高。
在API中,有与优先级对应的常量:
- Thread.MAX_PRIORITY:最高的优先级–>10
- Thread.NORM_PRIORITY:默认优先级–>5
- Thread.MIN_PRIORITY:最低的优先级->1
package ThreadClass;
/**
* 测试线程优先级 1 - 10
* NORM~(5)(默认) MIN~(1) MAX~(10)
* 优先级高,先执行的概率高
* @author 王星宇
* @date 2020年2月16日
*/
public class PriorityThread {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getPriority());
Thread t1 = new Thread(new testPriority());
Thread t2 = new Thread(new testPriority());
Thread t3 = new Thread(new testPriority());
Thread t4 = new Thread(new testPriority());
Thread t5 = new Thread(new testPriority());
Thread t6 = new Thread(new testPriority());
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MAX_PRIORITY);
t3.setPriority(Thread.MAX_PRIORITY);
t4.setPriority(Thread.MIN_PRIORITY);
t5.setPriority(Thread.MIN_PRIORITY);
t6.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
}
}
class testPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "-->"
+ Thread.currentThread().getPriority());
}
}
守护线程
在一个运行的程序中,线程分为两类:守护线程 和 用户线程:
- 用户线程:默认情况下,无论是主线程还是自己定义的线程都是用户线程,虚拟机会等待所用的用户线程结束后再停止。
- 守护线程:守护线程是为用户线程服务的,虚拟机不用等待守护线程结束再停止。常用来记录日志等。
可调用setDaemon(true);方法将一个用户线程调整为守护线程。
package ThreadClass;
/**
* 测试守护线程:为用户线程服务,jvm停止不用等守护线程结束
* 默认都是用户线程,虚拟机等待所有用户线程结束
* @author 王星宇
* @date 2020年2月16日
*/
public class daemonThread {
public static void main(String[] args) {
God gg = new God();
you yy = new you();
gg.setDaemon(true);//调整为守护线程
gg.start();
yy.start();
}
}
class you extends Thread{
@Override
public void run() {
for(int i = 1;i <= 365;i++) {
System.out.println("活了" + i + "天....");
}
System.out.println("GAME OVER..");
}
}
class God extends Thread{
@Override
public void run() {
while(true) {
System.out.println("上帝保佑你.....");
}
}
}