运行了以后等了好久,500个线程也执行不完是为什么?

来源:4-2 volatile不能保证原子性(上)

zm_bad

2019-01-02 18:22

package synchronize;

public class VolatileDemo {
    private volatile int number = 0;

    public int getNumber() {
        return this.number;
    }

    public void increase() {
        this.number++;
    }
    public static void main(String[] args) {
        final VolatileDemo vd = new VolatileDemo();
        for (int i = 0; i < 500; i++) {
            new Thread(() -> vd.increase()).start();
        }
        while (Thread.activeCount() > 1) {
            Thread.yield();
        }
        System.out.println("number is " + vd.getNumber());
    }
}

这个代码在idea里面启动了以后,一直不结束是为什么?

写回答 关注

3回答

  • iceWang
    2019-01-22 10:35:16
    已采纳

    改成 > 2,就可以返回了

  • 慕粉3779733
    2019-01-20 21:40:58

    idea中Thread.activeCount()返回的是2,是因为多了个monitor ctrlbreak线程。

    可参考 http://blog.csdn.net/xiaolinzi007/article/details/44487851


    JYChiu

    有用!!谢谢

    2019-06-13 16:14:14

    共 1 条回复 >

  • kid123
    2019-01-04 20:18:33

    在while循环中打印出Thread.activeCount()的数量,并输出运行的线程名称,确认一下除了主线程外还有哪个线程在执行。

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55908 学习 · 74 问题

查看课程

相似问题