问答详情
源自:4-2 volatile不能保证原子性(上)

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

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里面启动了以后,一直不结束是为什么?

提问者:zm_bad 2019-01-02 18:22

个回答

  • 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


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

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