while(Thread.activeCount() > 1) 所有子线程执行完还是大于1

1.发现了一个问题 Thread.activeCount()会一直大于2

public class VolatileTest {
  public static volatile int race = 0;

  public static void increase() {
    race++;
  }

  private static final int THREADS_COUNT = 20;

  public static void main(String[] args) {
    Thread[] threads = new Thread[THREADS_COUNT];
    for (int i = 0; i < THREADS_COUNT; i++) {
      threads[i] = new Thread(new Runnable() {
        @Override
        public void run() {
          for (int i = 0; i < 10000; i++) {
            increase();
          }
        }
      });
      threads[i].start();
    }
    while (Thread.activeCount() > 1) {
      Thread.yield();
    }
    System.out.println(race);
  }
}

2.陷入了死循环.......why?

Thread.yield();//应该主线程先让出cpu使用权

问题在这Thread.activeCount() 还有个守护线程!!!所以就会一直陷入无限循环。

加了一句Thread.currentThread().getThreadGroup().list();

while (Thread.activeCount() > 1) {
Thread.currentThread().getThreadGroup().list();
Thread.yield();
}

猜你喜欢

转载自www.cnblogs.com/chenhg/p/12953694.html
今日推荐