您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java并发多线程编程——从线程的优先级看饥饿问题

小志的博客 发布时间:2021-04-12 22:15:31 ,浏览量:0

目录
    • 一、多线程优先级
    • 二、多线程如何产生饥饿问题
    • 三、高优先级吞噬所有低优先级案例
    • 四、如何尽量避免饥饿问题

一、多线程优先级
  • 线程的优先级用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
关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0375s