问答详情
源自:2-3 Java线程-隋唐演义实战开发---演员简介

两个线程交替的疑问

Java中某条线程是否只有当显式调用了sleep()方法时,才会休眠并让出处理器资源?我的运行结果中两个线程的确是交替运行,但不是运行完整10次就进行交替。也就是说某一线程的sleep()方法还未被调用时,另一线程就竞争到了cpu资源。这个结果是否正确呢?多谢回答~

提问者:NobodyUnderstandBS 2015-02-21 18:53

个回答

  • Arthur
    2015-02-25 21:11:56

    你得结果也是正常的。简单说只有Running的线程拥有CPU,CPU时间片用完就释放。这就是为什么还没调用sleep(),另一个线程就执行了。要把整个问题说清楚需要了解Java线程的状态及迁移的知识。你可以参考慕课上的《细说Java多线程》

  • 渡边钧
    2016-12-05 22:39:12

    我也在想这个问题

  • sadfasdfas
    2015-02-26 02:33:24

    这个和操作系统有关,Linux按照时间分片,Windows要等线程主动释放;在Java中,调用静态方法会造成主动释放。

    你可以这样测试:A和B两个线程,里面变量从0加到N(随意),循环结束之后再调用System.out.println();Windows上应该是先start()的那个线程首先输出,有一点需要注意的是,除了最后的输出以外,不要有任何的静态方法调用