java吧 关注:1,272,129贴子:12,782,909
  • 7回复贴,共1

求助多线程问题

取消只看楼主收藏回复

想问下,我这样起了三个线程,三个test方法都是只有输出语句,为啥三个输出顺序永远是123啊?如果每个方法里都sleep 1秒,又会变成132不变,这事为啥啊,我的理解不应该每次顺序都不一样吗


IP属地:河南1楼2023-06-04 20:40回复
    每个test方法都加了synchronized


    IP属地:河南来自Android客户端3楼2023-06-04 23:41
    回复
      2025-08-01 21:44:10
      广告
      不感兴趣
      开通SVIP免广告
      没人吗


      IP属地:河南来自Android客户端4楼2023-06-05 12:30
      回复
        111


        IP属地:河南来自Android客户端7楼2023-06-05 16:32
        回复
          java吧亡了吗,就剩卖课的了


          IP属地:河南来自Android客户端11楼2023-06-08 12:03
          回复
            看了好多资料,说下我的理解,在这个例子里锁中的代码只有一个输出语句,启动线程的速度远比线程执行的速度慢,所以线程1拿到锁执行输出语句之后立刻释放锁,此时线程2刚刚处于就绪状态,直接自旋拿到锁输出,3同理,所以输出一直是123。方法1加了sleep1000后,1s足够线程23启动,23启动自旋获取锁失败进入竞争栈,1释放锁3先出栈,造成了132的输出顺序


            IP属地:河南来自Android客户端13楼2023-06-08 17:06
            收起回复
              这个是正常的,123的顺序都不一定 @最后的倔强


              IP属地:河南14楼2023-06-08 20:52
              回复
                今天有想到了这个问题,翻出来复习下,有没有大佬看看是不是我想的这样


                IP属地:河南来自Android客户端15楼2024-02-21 18:05
                回复