JCU-线程池

thread.getId()是当前执行线程的ID,每个线程有自己的ID,当一个线程执行完被销毁后,它拥有的ID会被重新分配给其他线程。

内存

  1. 线程池中维护一定数量的线程,进行重复利用。(减少创建、启动、销毁线程的开销)
  2. 线程从任务队列中取任务执行
    在这里插入图片描述

Java中的线程池

工具类Executors:
在这里插入图片描述

工具类Executors中方法

创建固定线程数的线程池

创建有调度功能的线程池

有执行时间、频率的调度(类似定时器Timer)
在这里插入图片描述

scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) (同于Timer的schedule()作业调度)
在这里插入图片描述

scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)(这个是在任务执行结束后才进行计时delay,与scheduleAtFixedRate()不同)
在这里插入图片描述

核心线程池的底层实现

Executors工具类中的newCachedThreadPool(),newSingleThreadExcecutor(),newFixedThreadPool()底层源码都由ThreadPoolExecutor类实现

在这里插入图片描述

接口BlockingQueue < E >

这些都在java.util.concurrent包下有实现类,用的时候直接new类对象就可以。
在这里插入图片描述

Executors工具类中的newCachedThreadPool(),newSingleThreadExcecutor(),newFixedThreadPool():
在这里插入图片描述

接口RejectedExecutionHandler

这几大策略都在ThreadPoolExecutor中有静态实现的内部类(其中AbortPolicy是默认类)用的时候直接new内部类对象就可以
在这里插入图片描述

接口ThreadFactory

线程池中的线程是由ThreadFactory创建的, 在Executors中实现了下面两个内部类 :
在这里插入图片描述

总结

我们只需做到最基本的以下三点:

  1. 创建线程池:ExecutorService executorService = Executors.new…();
  2. 创建任务:Runnable r = new Runnable(){ run()…任务…}
  3. 将任务提交给线程池就可以了:executorService.submit( r );或executorService.execute( r );
自定义线程池

在这里插入图片描述


监控线程池

在这里插入图片描述

扩展线程池

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

线程池中异常

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值