线程池的四种创建方式和基本理论讲解

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。

使用线程池的好处:

1、降低资源开销    (线程的创建和销毁的开销巨大,而通过线程池的重用大大的减少了这些不必要的内存资源的消耗。

2、提高线程的执行效率    (线程任务交给线程池后,无需等待线程的创建立即执行。)

3、提高对线程的可管理性  ( 线程的频繁创建,会消耗大量的资源,降低系统稳定性。使用线程池可以对线程进行统一的分配管理)

线程池的核心类 ThreadPoolExecutor

下面我们讲一下Java通过Executors(jdk1.5并发包)提供四种线程池的创建方式

1、newCachedThreadPool  创建一个可缓存的线程池,如果线程池的长度超过需要处理的,可灵活回收空闲线程,

若不满足处理需求则创建新线程。

static void createnewCachedThreadPool(){
		ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
		for(int i=0;i<10;i++){
			cachedThreadPool.execute(()->{
				System.out.println("这是 newCachedThreadPool 线程池:"+Thread.currentThread().getName());
			});
		}	
	}
	

2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待

static void createnewFixedThreadPool(){
		ExecutorService cachedThreadPool = Executors.newFixedThreadPool(10);
		for(int i=0;i<10;i++){
			cachedThreadPool.execute(()->{
				System.out.println("这是 newFixedThreadPool 线程池:"+Thread.currentThread().getName());
			});
		}	
	}

3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

static void createnewScheduledThreadPool(){
		 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
		for(int i=0;i<10;i++){
			scheduledThreadPool.schedule(()->
				System.out.println("这是 newSingleThreadExecutor 线程池:"+Thread.currentThread().getName())
			, 3,TimeUnit.SECONDS);			
		}	
	}

4、newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

static void createnewSingleThreadExecutor(){
		ExecutorService cachedThreadPool = Executors.newSingleThreadExecutor();
		for(int i=0;i<10;i++){
			cachedThreadPool.execute(()->{
				System.out.println("这是 newSingleThreadExecutor 线程池:"+Thread.currentThread().getName());
			});
		}	
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值