• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

有没有碰到过这种情况,这是什么意思

创建3个线程run一个method方法,第一个线程启动间隔10ms启动第二个线程再隔200ms启动第三个线程。

并没有对线程2作出超过线程3的限制,但是每次都是线程3先执行,这是什么意思?后面试了下2000ms执行的顺序才和代码顺序一样。下面附上代码,请各位看官指教!
public class ChangeLock {        private String lock = "lock";                private void method(){                synchronized (lock) {                        try {                                System.out.println("当前线程 : "  + Thread.currentThread().getName() + "开始");                                if(Thread.currentThread().getName().equals("t1"))lock = "1";                                Thread.sleep(2000);                                System.out.println("当前线程 : "  + Thread.currentThread().getName() + "结束"+lock+"内存地址:"+System.identityHashCode(lock));                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                }        }                public static void main(String[] args) throws InterruptedException {                final ChangeLock changeLock = new ChangeLock();                Thread t1 = new Thread(()->changeLock.method(),"t1");                Thread t2 = new Thread(()->(new ChangeLock()).method(),"t2");                t1.start();                Thread.sleep(10);                t2.start();                Thread.sleep(200);                Thread t3=new Thread((new ChangeLock())::method,"t3");                t3.start();                        }        }执行结果:

当前线程 : t1开始
当前线程 : t1结束1内存地址:1901608479
当前线程 : t3开始
当前线程 : t3结束lock内存地址:460860509
当前线程 : t2开始
当前线程 : t2结束lock内存地址:460860509


没做更多的测试,想想200ms的时间够cpu来说已经很长了,为什么t3总能在t2线程之前执行???

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!