标签:异常 ice 多线程 rdo live The 除了 lex 方式
多线程缺点:
采用线程池的好处
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
corePoolSize:线程池中核心线程数的最大值,核心线程不会被销毁
maximumPoolSize:线程池中能拥有的最大线程数
workQueue:用于缓存任务的阻塞队列
阻塞队列是指当核心线程无空闲时,有新的任务进来,就会先添加到阻塞队列等待核心线程空闲
上述三者关系:新的任务进来,如果没有空闲线程
keepAliveTime:表示空闲的线程存活的时间
unit:keepAliveTime的单位
handler:拒绝新任务采取的策略
ThreadPoolExecutor.ThreadAbortPolicy() | 抛出RejectedExecutionException |
---|---|
ThreadPoolExecutor.CallerRunsPolicy() | 由向线程池提交任务的线程来执行任务 |
ThreadPoolExecutor.DiscardOldestPolicy() | 抛弃最旧的任务(最先提交而没有得到执行的任务) |
ThreadPoolExecutor.DiscardPolicy() | 抛弃当前的任务 |
threadFactory:指定线程创建工厂
介绍创建线程的时候我们提到过,javaSE定义了一个Executors类简化我们创建线程池的过程,提供了四个线程池的创建方法
可缓存线程池,线程池长度超过处理需要,可以灵活回收空余线程,若无可回收,则新建线程
特点:
使用
//创建线程池
ExecutorService cachedThreadPool = Executors.newCacheThreadPool();
//启动线程,cachedThreadPool线程只能通过实现Runnable接口的方式实现
cachedThreadPool.execute(new Runnable(){
public void run(){
…………
}
});
创建一个指定工作线程数量的线程池,每当提交一个任务就创建一个线程,达到线程池最大值则存入到池队列中
优点:具有线程池提高程序效率和节省创建线程时所耗的开销
缺点:线程池中的空闲线程不会自动销毁,线程池中没有可运行任务时,它不会释放工作线程,还有占用一定的系统资源,适合一直频繁有任务进行且任务量稳定的场景
使用
//3为自定义的线程数
ExecutorService fixThreadPool = Executors.newFixedThreadPool(3);
//使用方式和缓存线程池类似
fixThreadPool.execute(new Runnable(){
public void run(){
…………
}
});
定时线程:该方法创建一个定长的线程池,而且支持定时的以及周期性的任务执行
使用
//创建定长线程池
ScheduleExecutorService scheduleThreadPool = Executors.scheduleThreadPool(5);
//设置启动线程
scheduleThreadPool.schedule(new Runnable(){
public void run(){
…………
}
},3,TimeUnit.SECONDS);
//两个参数设置延迟时间,数值和单位,这里是3秒
标签:异常 ice 多线程 rdo live The 除了 lex 方式
原文地址:https://www.cnblogs.com/JIATCODE/p/13276283.html