为什么newFixedThreadPool产生的线程id是从9开始的?




 package com.cn.pkg;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class SemapDemo implements Runnable {

    final Semaphore semp = new Semaphore(5);

    @Override
    public void run() {

        try {
            semp.acquire();
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getId()+"done");
            semp.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {

        ExecutorService exec = Executors.newFixedThreadPool(20);
        final SemapDemo demo = new SemapDemo();

        for (int i = 0; i < 40; i++) {
            exec.submit(demo);
        }

    }
}

产生的结果
图片说明

for (int i = 0; i < 40; i++) //开了40线程循环
final Semaphore semp = new Semaphore(5);//每次只开5个线程,
9是随机的

并不是,我做了测试,循环只是添加任务,线程池只有20个线程,信号量是5只是说他最多有5个线程同时访问,不管线程池有多少线程,id都是从9开始的