Java 多线程规范(2)线程池详解
来源:互联网 发布:android照相机源码 编辑:程序博客网 时间:2024/06/16 11:51
十四,线程池详解
之前我们已经了解ExecutorService接口声明的方法:
public abstract <T> T invokeAny(Collection<? extends Callable<T>>) throws InterruptedException,ExecutionExceptionpublic abstract <T> T invokeAny(Collection<? extends Callable<T>>,long,TimeUnit) throws InterruptedException,ExecutionException,TimeoutExceptionpublic abstract <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>>) throws InterruptedExceptionpublic abstract <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>>,long,TimeUnit) throws InterruptedExceptionpublic abstract <T> Future<T> submit(Runnable,T)public abstract <T> Future<T> submit(Callable<T>)public abstract boolean awaitTermination(long,TimeUnit) throws InterruptedExceptionpublic abstract boolean isShutdown()public abstract boolean isTerminated()public abstract List<Runnable> shutdownNow()public abstract Future<?> submit(Runnable)public abstract void execute(Runnable) 继承自Executor这个顶级接口public abstract void shutdown()
API线程池使用示例
使用线程池要自己设置参数,做到每个参数心中有数。
下面具体举个线程池的例子,这也是API中Executors.newCachedThreadPool();的实现
public class ThreadPoolTool { public static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor( 0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); public static void execute(Runnable command){ THREAD_POOL_EXECUTOR.execute(command); }}
线程池几个参数的说明
BlockingQueue<Runnable> workQueue
阻塞队列,如果是ArrayBlockingQueue可以限制队列大小BlockingQueue是个接口,有几个很重要的子类
下面的表格要熟
Summary of BlockingQueue methods
它有这么几个常用和不常用子类
线程池的几个例子
上面已经给出了Executors.newCacheThreadExector的例子
下面给是其他几个API的
串行Executors.newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); }
固定大小Executors.newFixedThreadPool(int nThreads)
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
我们怎么优雅的使用线程池和他的接口?
public interface ThreadPool { Executor getExecutor();}
public class FixedThreadPool implements ThreadPool { public Executor getExecutor() { String name = ThreadPoolConstants.DEFAULT_THREAD_NAME; int threads = ThreadPoolConstants.DEFAULT_THREADS; int queues = ThreadPoolConstants.DEFAULT_QUEUES; return new ThreadPoolExecutor(threads, threads, 0, TimeUnit.MILLISECONDS, queues == 0 ? new SynchronousQueue<Runnable>() : (queues < 0 ? new LinkedBlockingQueue<Runnable>() : new LinkedBlockingQueue<Runnable>(queues)), new NamedThreadFactory(name, true), new AbortPolicyWithReport(name)); }}
体会下
阅读全文
1 0
- Java 多线程规范(2)线程池详解
- Java多线程-----第二节:线程池详解
- java多线程详解介绍线程池使用
- Thread(线程)详解2—多线程同步和线程池
- Java多线程-线程池
- java 多线程- 线程池
- java 多线程线程池
- java多线程:线程池
- java多线程,线程池
- Java多线程:线程池
- java 多线程--线程池
- Java多线程 -- 线程池
- 【Java多线程】-线程池
- java多线程 线程池
- Java多线程/线程池
- java多线程,线程池
- Java多线程:线程池
- java 多线程 线程池
- 所有的惠普机器!区别对待
- springmvc报的service空指针的异常
- 几个简单的system(const char* _Command)函数命令
- Unity3D学习记录——API IEnumerator(协同程序)
- 第三章 Java符号相关
- Java 多线程规范(2)线程池详解
- 关于Spring事务管理中@Transactional的参数配置
- 01背包
- 【经典算法】——KMP,深入讲解next数组的求解
- leetcode 644: 子数组的最大平均值
- 数据库中简单的增删改查(CRUD)
- 学以致用——ikb知识库英文词条词频分析-Part1-数据提取(VBA)
- 深度学习视觉领域常用数据集汇总
- 设计模式之多用组合,少用继承