В Java есть несколько потоков, которые работают в фоновом режиме, например Финализатор для вызова finalize()
методов. Вы можете распечатать их, посмотрев на самую родительскую ThreadGroup :
ThreadGroup group = Thread.currentThread().getThreadGroup();
while (group.getParent() != null) {
group = group.getParent();
}
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
Arrays.stream(threads).forEach(System.out::println);
будет выводиться что-то вроде
Thread[Reference Handler,10,system]
Thread[Finalizer,8,system]
Thread[Signal Dispatcher,9,system]
Thread[Attach Listener,5,system]
Thread[main,5,main]
Thread[Monitor Ctrl-Break,5,main]
В вашем примере Thread.activeCount()
является сокращением для Thread.currentThread().getThreadGroup().activeCount()
, поэтому вы смотрите на самую верхнюю, текущую группу ThreadGroup.