版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42528266/article/details/103013657
查看ThreadGroup、Thread构造方法代码,观察默认线程组的情况
思路:创建好多个线程,放入线程池中,使用时直接获取引用,不使用时放回池中。可以避 免频繁创建销毁、实现重复利用 JDK1.5起,提供了内置线程池
Executor:
线程池顶级接口,只有一个方法ExecutorService:
真正的线程池接口void execute(Runnable command) :
执行任务/命令,没有返回值,一般用来执行Runnable<T> Future<T> submit(Callable<T> task):
执行任务,有返回值,一般又来执行Callablevoid shutdown() :
关闭连接池AbstractExecutorService:
基本实现了ExecutorService的所有方法ThreadPoolExecutor:
默认的线程池实现类ScheduledThreadPoolExecutor:
实现周期性任务调度的线程池Executors:
工具类、线程池的工厂类,用于创建并返回不同类型的线程池Executors.newCachedThreadPool():
创建一个可根据需要创建新线程的线程池Executors.newFixedThreadPool(n);
创建一个可重用固定线程数的线程池Executors.newSingleThreadExecutor() :
创建一个只有一个线程的线程池Executors.newScheduledThreadPool(n):
创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行corePoolSize:
核心池的大小 maximumPoolSize:
最大线程数。 corePoolSize
和maximumPoolSize
之间的线程数会自动释放,小于等于corePoolSize的不会释放。当大于了 这个值就会将任务由一个丢弃处理机制来处理。keepAliveTime:
线程没有任务时最多保持多长时间后会终止 corePoolSize
和maximumPoolSize
之间的线程TimeUnit
:keepAliveTime的时间单位BlockingQueue
:存储等待执行的任务的阻塞队列,有多中选择,可以是顺序队列、链式队列等。线程工厂,默认是DefaultThreadFactory,Executors的静态内部类
拒绝处理任务时的策略。如果线程池的线程已经饱和,并且任务队列也已满,对新的任 务应该采取什么策略。 比如抛出异常、直接舍弃、丢弃队列中最旧任务等,默认是直接抛出异常。 1、CallerRunsPolicy:如果发现线程池还在运行,就直接运行这个线程 2、DiscardOldestPolicy:在线程池的等待队列中,将头取出一个抛弃,然后将当前线程放进去。 3、DiscardPolicy:什么也不做 4、AbortPolicy:java默认,抛出一个异常: