今天时间学习ThreadPoolExecutor api,该类是JUC原子包中的类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现,初学乍练,有很多一知半解的地方,待后续有了深入理解再来补充
package test.java.util.concurrent;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
/**
* ThreadPoolExecutor的测试类
*
* @date 2020-07-28 23:03:01
*/
public class ThreadPoolExecutorTest {
/**
* corePoolSize 线程池大小
* maximumPoolSize 最大线程池大小
* keepAliveTime 线程存活时间
* TimeUnit unit 时间单位
* BlockingQueue<Runnable> workQueue 工作队列
* @Param
*/
@Test
public void testConstruct0()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3, TimeUnit.SECONDS,new LinkedBlockingDeque<>());
testObj.execute(()-> System.out.println(23));
}
/**
* corePoolSize 线程池大小
* maximumPoolSize 最大线程池大小
* keepAliveTime 线程存活时间
* TimeUnit unit 时间单位
* BlockingQueue<Runnable> workQueue 工作队列
* threadFactory 线程创建工厂
* @Param
*/
@Test
public void testConstruct1()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory());
testObj.execute(()-> System.out.println(23));
}
/**
* corePoolSize 线程池大小
* maximumPoolSize 最大线程池大小
* keepAliveTime 线程存活时间
* TimeUnit unit 时间单位
* BlockingQueue<Runnable> workQueue 工作队列
* RejectedExecutionHandler 线程池拒绝策略
* @Param
*/
@Test
public void testConstruct2()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
}
/**
* corePoolSize 线程池大小
* maximumPoolSize 最大线程池大小
* keepAliveTime 线程存活时间
* TimeUnit unit 时间单位
* BlockingQueue<Runnable> workQueue 工作队列
* threadFactory 线程创建工厂
* RejectedExecutionHandler 线程池拒绝策略
* @Param
*/
@Test
public void testConstruct3()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
}
/**
* 执行任务
* @Param
*/
@Test
public void testExecute()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
}
/**
* 设置线程池状态为shutdown
* @Param
*/
@Test
public void testShutdown()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
testObj.shutdown();
}
/**
*设置线程池状态为terminated
* @Param
*/
@Test
public void testShutdownNow()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.shutdownNow();
testObj.execute(()-> System.out.println(23));
}
/**
* 线程池是否关闭状态
* @Param
*/
@Test
public void testIsShutdown()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.isShutdown());
}
/**
*线程池是否正在终止状态
* @Param
*/
@Test
public void testIsTerminating()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.isTerminating());
}
/**
*线程池是否终止状态
* @Param
*/
@Test
public void testIsTerminated()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.isTerminated());
}
/**
* 等待指定时间后终止
* @Param
*/
@Test
public void testAwaitTermination()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.awaitTermination(3,TimeUnit.SECONDS));
}
/**
* 设置线程创建工厂
* @Param
*/
@Test
public void testSetThreadFactory()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setThreadFactory(Executors.defaultThreadFactory());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.awaitTermination(3,TimeUnit.SECONDS));
}
/**
*获取线程创建工厂
* @Param
*/
@Test
public void testGetThreadFactory()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.getThreadFactory());
}
/**
* 设置拒绝策略
* @Param
*/
@Test
public void testSetRejectedExecutionHandler()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.getThreadFactory());
}
/**
*获取拒绝策略
* @Param
*/
@Test
public void testGetRejectedExecutionHandler()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.getRejectedExecutionHandler());
}
/**
* 设置核心线程池大小
* @Param
*/
@Test
public void testSetCorePoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setCorePoolSize(3);
}
/**
*获取核心线程池大小
* @Param
*/
@Test
public void testGetCorePoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getCorePoolSize());
}
/**
* 预启动一个核心线程,返回启动的线程数
* @Param
*/
@Test
public void testPrestartCoreThread()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.prestartCoreThread());
}
/**
*预启动所有核心线程,返回启动的线程数
* @Param
*/
@Test
public void testPrestartAllCoreThreads()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.prestartAllCoreThreads());
}
/**
* 查看是否允许线程超时
* @Param
*/
@Test
public void testAllowsCoreThreadTimeOut()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
System.out.println(testObj.allowsCoreThreadTimeOut());
}
/**
* 设置允许线程超时
* @Param
*/
@Test
public void testAllowCoreThreadTimeOut()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
testObj.execute(()-> System.out.println(23));
testObj.allowCoreThreadTimeOut(true);
}
/**
* 设置允许最大线程池大小
* @Param
*/
@Test
public void testSetMaximumPoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setMaximumPoolSize(3);
}
/**
*获取允许最大线程池大小
* @Param
*/
@Test
public void testGetMaximumPoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getMaximumPoolSize());
}
/**
* 设置线程存活时间
* @Param
*/
@Test
public void testSetKeepAliveTime()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.setKeepAliveTime(3,TimeUnit.SECONDS);
}
/**
*获取线程存活时间
* @Param
*/
@Test
public void testGetKeepAliveTime()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getKeepAliveTime(TimeUnit.SECONDS));
}
/**
* 获取工作队列
* @Param
*/
@Test
public void testGetQueue()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getQueue());
}
/**
* 移除任务
* @Param
*/
@Test
public void testRemove()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.remove(()-> System.out.println());
}
/**
* 情况队列
* @Param
*/
@Test
public void testPurge()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
testObj.purge();
}
/**
* 获取工作队列大小
* @Param
*/
@Test
public void testGetPoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getPoolSize());
}
/**
* 获取存活的线程数量
* @Param
*/
@Test
public void testGetActiveCount()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getActiveCount());
}
/**
* 获取最大线程池大小
* @Param
*/
@Test
public void testGetLargestPoolSize()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getLargestPoolSize());
}
/**
* 获取任务数量
* @Param
*/
@Test
public void testGetTaskCount()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getTaskCount());
}
/**
*获取完成的任务数量
* @Param
*/
@Test
public void testGetCompletedTaskCount()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.getCompletedTaskCount());
}
/**
*toString
* @Param
*/
@Test
public void testToString()throws Exception{
ThreadPoolExecutor testObj=new ThreadPoolExecutor(3,3,3,
TimeUnit.SECONDS,new LinkedBlockingDeque<>(), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
System.out.println(testObj.toString());
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章