1、设置线程优先级
通过Thread类中的setPriority方法设置线程优先级
setPriority()方法接收一个int类型的参数,通过这个参数可以指定线程的优先级,取值范围是整数1~10,优先级随着数字的增大而增强。
在Thread类中封装了三个int类型的数字:
- 优先级最低:public final static int MIN_PRIORITY = 1;
- 优先级居中:public final static int NORM_PRIORITY = 5;
- 优先级最高:public final static int MAX_PRIORITY = 10;
Thread thread1 = new Thread(()->{
for (int i = 0; i < 5; i++) {
System.out.println("我的优先级较低");
}
});
Thread thread2 = new Thread(()->{
for (int i = 0; i < 5; i++) {
System.out.println("我的优先级较高");
}
});
//thread1.setPriority(1);
thread1.setPriority(Thread.MIN_PRIORITY);
//thread2.setPriority(10);
thread2.setPriority(Thread.MAX_PRIORITY);
thread1.start();
thread2.start();
2、线程优先级越高的线程并不一定先执行
- Java线程是通过映射到系统的原生线程上来实现的,所以线程的调度最终还是取决于操作系统, 优先级反映的是线程占用资源的多少,优先级越高,占用资源越多,性能越好
3、守护线程
非守护进程一结束,守护进程立马就结束
Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者
- thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
- 在Daemon线程中产生的新线程也是Daemon的。
- 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。