# poolstudy **Repository Path**: njls/poolstudy ## Basic Information - **Project Name**: poolstudy - **Description**: 可视化学习JAVA的线程池。通过调整线程池参数,查看线程的执行时间图。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-07-11 - **Last Updated**: 2024-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
### 介绍 可视化学习JAVA的线程池。可以实时调节各个参数,并直接用时间轴图表查看执行结果。 ## 软件架构 使用swing界面,真实调用java线程池并展示结果。 ## 参数说明 1. corePoolSize 线程池核心线程大小 线程池中维护的一个最少的线程数量,即使这些线程处于空闲状态,他们也不会被销毁,除非设置了allowCoreThreadTimeOut。 2. maximumPoolSize 线程池最大线程数量 一个任务被提交到线程池之后,首先会到工作队列中,如果工作队列满了,则会创建一个新的线程,然后从工作队列中取出一个任务交给新线程处理,而将刚提交上来的任务放入到工作队列中。线程池最大的线程数量由maximunPoolSize来指定。 3. keepAliveTime 空闲线程存活时间 一个线程如果处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定的时间后,这个空闲的线程将被销毁,这个指定的时间就是keepAliveTime。这个参数其实包括了另一个参数:unit 空闲线程存活时间单位。在本工具中,统一转换成毫秒单位。 4. workQueue 工作队列 新任务被提交之后,会先进入到此工作队列中,任务调度时再从队列中取出任务。 5. handler 拒绝策略 当工作队列中的任务已经达到了最大的限制,并且线程池中线程数量达到了最大限制,如果这时候有新任务进来,就会采取拒绝策略,jdk中提供了四种拒绝策略: - AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 - DiscardPolicy:丢弃任务,但是不抛出异常。可能导致无法发现系统的异常状态。 - DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务。 - CallerRunsPolicy:由调用线程处理该任务。 最后还有一个参数:threadFactory 线程工厂。这个参数并不影响线程池的执行顺序,只是影响创建线程的过程。所以不放在演示参数中。 ## 任务说明 可以指定若干任务加入到线程池。 - id:顺序自然数。 - 开始时间:创建任务的时间 - 任务时间:该任务消耗的时间 - 优先度:在PriorityBlockingQueue、DelayQueue等优先度队列中才用的到,值越大,任务的优先度越高。 - 延迟时间:在DelayQueue中用到,指定任务必定延迟一定时间后才启动。 增加任务、删除任务都是从任务列表尾部操作,不能在中间插入一个任务,也不能删除中间的任务。除了id,其他的任务的信息都可以修改。