重月雀 2021-04-16 10:40 采纳率: 100%
浏览 49
已采纳

线程让位,为什么从结果来看就只让位了一次?

 代码:

public class Test {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable6());
        t.setName("线程x");
        t.start();

        for (int i = 1; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + "--->" + i);
        }
    }
}


class MyRunnable6 implements Runnable{

    @Override
    public void run() {
        for(int i = 1;i <= 100;i++){
            //每隔10个数就让位一下
            if(i % 10 == 0){
                //让位给主线程
                Thread.yield();
            }
            System.out.println(Thread.currentThread().getName() + "--->" + i);
        }
    }
}

运行结果:

main--->1
main--->2
main--->3
线程x--->1
main--->4
线程x--->2
main--->5
线程x--->3
main--->6
线程x--->4
main--->7
线程x--->5
main--->8
线程x--->6
main--->9
线程x--->7
main--->10
线程x--->8
main--->11
线程x--->9
main--->12
main--->13
main--->14
main--->15
main--->16
main--->17
main--->18
main--->19
main--->20
main--->21
main--->22
main--->23
线程x--->10
main--->24
线程x--->11
main--->25
线程x--->12
main--->26
线程x--->13
main--->27
线程x--->14
main--->28
线程x--->15
main--->29
线程x--->16
main--->30
线程x--->17
main--->31
线程x--->18
main--->32
线程x--->19
main--->33
线程x--->20
main--->34
线程x--->21
main--->35
线程x--->22
main--->36
线程x--->23
main--->37
线程x--->24
main--->38
线程x--->25
main--->39
线程x--->26
main--->40
线程x--->27
main--->41
线程x--->28
main--->42
线程x--->29
main--->43
线程x--->30
main--->44
线程x--->31
main--->45
线程x--->32
main--->46
线程x--->33
main--->47
线程x--->34
main--->48
线程x--->35
main--->49
线程x--->36
main--->50
线程x--->37
main--->51
线程x--->38
main--->52
线程x--->39
main--->53
线程x--->40
main--->54
线程x--->41
main--->55
线程x--->42
main--->56
线程x--->43
main--->57
线程x--->44
main--->58
线程x--->45
main--->59
线程x--->46
main--->60
线程x--->47
main--->61
线程x--->48
main--->62
线程x--->49
main--->63
线程x--->50
main--->64
线程x--->51
main--->65
线程x--->52
main--->66
线程x--->53
main--->67
线程x--->54
main--->68
线程x--->55
main--->69
线程x--->56
main--->70
线程x--->57
main--->71
线程x--->58
main--->72
线程x--->59
main--->73
main--->74
线程x--->60
main--->75
线程x--->61
main--->76
线程x--->62
main--->77
线程x--->63
main--->78
线程x--->64
main--->79
线程x--->65
main--->80
线程x--->66
main--->81
线程x--->67
main--->82
线程x--->68
main--->83
线程x--->69
main--->84
线程x--->70
main--->85
线程x--->71
main--->86
线程x--->72
main--->87
线程x--->73
main--->88
线程x--->74
main--->89
线程x--->75
main--->90
main--->91
main--->92
线程x--->76
main--->93
线程x--->77
main--->94
线程x--->78
main--->95
main--->96
线程x--->79
main--->97
线程x--->80
main--->98
线程x--->81
main--->99
线程x--->82
main--->100
线程x--->83
线程x--->84
线程x--->85
线程x--->86
线程x--->87
线程x--->88
线程x--->89
线程x--->90
线程x--->91
线程x--->92
线程x--->93
线程x--->94
线程x--->95
线程x--->96
线程x--->97
线程x--->98
线程x--->99
线程x--->100

Process finished with exit code 0

从运行结果来看就只有10的时候让位了,之后的20、30......都没有让位,这是什么原因,还是说在让位回到"就绪状态"之后,还是又抢到了cpu时间片,但是这样也太多次巧合了。

  • 写回答

1条回答 默认 最新

  • allway2 2021-04-16 11:03
    关注

    测试机是单核心无超线程CPU吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。