JUC学习,ThreadPoolExecutor线程池

线程池的作用的:
在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  第三:提高线程的可管理性。

常用线程池:ExecutorService 是主要的实现类,其中常用的有 :

Executors.newSingleThreadExecutor()
   newFixedThreadPool()
   newCachedThreadPool()
  
代码演示:

package com.zhangye;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class ThreadPoolExecutor {
	
	
	public static void main(String[] args) {

		Executor executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());    //固定长度线程池,Runtime.getRuntime().availableProcessors() 是获取cpu核数
		Executor executor2 = Executors.newSingleThreadExecutor(); //一个线程的线程池
		Executor executor3 = Executors.newCachedThreadPool();    //不固定长度线程池,最大线程数为Integer.MAX_VALUE
		for (int i = 1; i <= 10; i++) {
			executor.execute(()->{
				System.out.println(Thread.currentThread().getName()+"\t 生产苹果");
			});
		}
		
		for (int i = 1; i <= 10; i++) {
			executor2.execute(()->{
				System.out.println(Thread.currentThread().getName()+"\t 生产香蕉");
			});
		}
		
		for (int i = 1; i <= 30; i++) {
			executor3.execute(()->{
				System.out.println(Thread.currentThread().getName()+"\t 生产葡萄");
			});
		}
		
	}
}

executor打印结果,CPU是6核的,6个线程在处理
pool-1-thread-1 生产苹果
pool-1-thread-4 生产苹果
pool-1-thread-3 生产苹果
pool-1-thread-2 生产苹果
pool-1-thread-3 生产苹果
pool-1-thread-6 生产苹果
pool-1-thread-4 生产苹果
pool-1-thread-5 生产苹果
pool-1-thread-1 生产苹果
pool-1-thread-2 生产苹果

executor2打印结果,创建的是单个线程的线程池,只有一个线程处理
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉
pool-2-thread-1 生产香蕉

executor3打印结果,不固定长度的线程池,需要多少就创建多少
pool-3-thread-1 生产葡萄
pool-3-thread-5 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-2 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-8 生产葡萄
pool-3-thread-7 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-12 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-3 生产葡萄
pool-3-thread-1 生产葡萄
pool-3-thread-15 生产葡萄
pool-3-thread-9 生产葡萄
pool-3-thread-8 生产葡萄
pool-3-thread-5 生产葡萄
pool-3-thread-2 生产葡萄
pool-3-thread-16 生产葡萄
pool-3-thread-4 生产葡萄
pool-3-thread-14 生产葡萄
pool-3-thread-13 生产葡萄
pool-3-thread-12 生产葡萄
pool-3-thread-6 生产葡萄
pool-3-thread-10 生产葡萄
pool-3-thread-11 生产葡萄
pool-3-thread-7 生产葡萄

上一篇:Java 线程池 ThreadPoolExecutor 的使用


下一篇:线程池为什么不允许使用Executors创建