目录
一、多线程优先级
- 一、多线程优先级
- 二、多线程如何产生饥饿问题
- 三、高优先级吞噬所有低优先级案例
- 四、如何尽量避免饥饿问题
- 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。
- 需要注意的是不同的系统有不同的线程优先级的取值范围,所以设置线程的优先级不要使用数字,要用MIN_PRIORITY、NORM_PRIORITY及MAX_PRIORITY
- window环境下最小优先级是1(MIN_PRIORITY)
- window环境下普通优先级是5(NORM_PRIORITY)
- window环境下最大优先级是10(MAX_PRIORITY)
- 高优先级吞噬所有低优先级的CPU时间片
- 线程被永久堵塞在一个等待进入同步块的状态
- 等待的线程永远不被唤醒
1、代码
package com.xz.thread.t2;
/**
* @description:
* @author: xz
*/
public class Target implements Runnable{
@Override
public void run() {
while(true){
System.out.println(Thread.currentThread().getName()+"正在运行......");
}
}
}
package com.xz.thread.t2;
/**
* @description:
* @author: xz
*/
public class Demo {
public static void main(String[] args) {
Thread t0 = new Thread(new Target());
Thread t1 = new Thread(new Target());
t0.setPriority(Thread.MIN_PRIORITY);//window环境下最小优先级是1
t1.setPriority(Thread.MAX_PRIORITY);//window环境下最大优先级是10
t0.start();
t1.start();
}
}
2、输出结果如下: 3、结论
- 并不是说t1线程的优先级比t0的高,t1线程执行完了才会执行t0才会执行,只是t1线程的优先级比较高所以cpu分配的资源比较多一些。
- 设置合理的优先级
- 使用锁来代替synchronized