zoukankan      html  css  js  c++  java
  • 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();
    }

  • 相关阅读:
    使用jQuery实现伪分页
    使用jQuery实现option的上移和下移
    理解Flux架构
    React 入门学习笔记1
    ES6新特性6:模块Module
    ES6新特性5:类(Class)和继承(Extends)
    ES6新特性4:字符串的扩展
    ES6新特性3:函数的扩展
    ES6新特性2:变量的解构赋值
    ES6新特性1:let和const
  • 原文地址:https://www.cnblogs.com/chenhg/p/12953694.html
Copyright © 2011-2022 走看看