1、第一步:在java中,线程数设置一般是由线程池来控制的,池的大小决定了线程的数量,线程代码如下:// corePoolSize:核心池的大小// maximumPoolSize:线程池最大线程数// keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止// TimeUnit: 参数keepAliveTime的时间单位// workQueue:一个阻塞队列ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(5));
2、第二步:上面的参数看前面2个,corePoolSize和maximumPoolSize,corePoolSize就用来创建线程,而maximumPoolSize就是用来限制创建线程的最大数量的
3、第三步:线程数量最优的办法就是以cpu的核心数来乘以2,比如是四核cpu就好就是8个线程,比如本电脑四核最好就是8线程
4、第四步:线程数和线程池的使用,在线程池中,线程是先进入到线程池,然后由这个池子来绝定立即执行还是等待执行,代码如下://实现自定义接口BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);pool = new ThreadPoolExecutor(8, 16, 1000, TimeUnit.MILLISECONDS, workQueue);for(int i=0;i<10;i++) { pool.execute(new ThreadTask("Task"+i));}pool.shutdown();
5、第五步:new ThreadTask是一个简单线程实现,用了lombok,代码如下:@Data class ThreadTask impl髫潋啜缅ements Runnable { private String taskName; public ThreadTask(String name) { this.setTaskName(name); } public void run() { //输出执行线程的名称 System.out.println("TaskName" + this.getTaskName() + "---ThreadName:" + Thread.currentThread().getName()); }}
6、第六步:运行上面的线程池方法,可以看到线程的数量是由core参数来控制的,最大数是8,如图: