
线程池的封装和使用(二)
发布日期:2021-05-07 14:11:07
浏览次数:17
分类:技术文章
本文共 4052 字,大约阅读时间需要 13 分钟。
PriorityThreadFactory.java
import java.util.concurrent.ThreadFactory;class PriorityThreadFactory implements ThreadFactory { private final int mThreadPriority; public PriorityThreadFactory(int threadPriority) { mThreadPriority = threadPriority; } @Override public Thread newThread(final Runnable runnable) { Runnable wrapperRunnable = new Runnable() { @Override public void run() { try { android.os.Process.setThreadPriority(mThreadPriority); } catch (Throwable t) { } runnable.run(); } }; return new Thread(wrapperRunnable); }}
MainThreadExecutor.java
import android.os.Handler;import android.os.Looper;import java.util.concurrent.Executor;class MainThreadExecutor implements Executor { private final Handler handler = new Handler(Looper.getMainLooper()); @Override public void execute(Runnable runnable) { handler.post(runnable); }}
DefaultExecutorSupplier.java
import java.util.concurrent.Executor;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class DefaultExecutorSupplier { public static final int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors(); private final ThreadPoolExecutor mForBackgroundTasks; private final ThreadPoolExecutor mForLightWeightBackgroundTasks; private final Executor mMainThreadExecutor; private static DefaultExecutorSupplier sInstance; public static DefaultExecutorSupplier getInstance() { if (sInstance == null) { synchronized (DefaultExecutorSupplier.class) { sInstance = new DefaultExecutorSupplier(); } } return sInstance; } private DefaultExecutorSupplier() { ThreadFactory backgroundPriorityThreadFactory = new PriorityThreadFactory(android.os.Process.THREAD_PRIORITY_BACKGROUND); mForBackgroundTasks = new ThreadPoolExecutor( NUMBER_OF_CORES * 2, NUMBER_OF_CORES * 2, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(), backgroundPriorityThreadFactory ); mForLightWeightBackgroundTasks = new ThreadPoolExecutor( NUMBER_OF_CORES * 2, NUMBER_OF_CORES * 2, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue (), backgroundPriorityThreadFactory ); mMainThreadExecutor = new MainThreadExecutor(); } public ThreadPoolExecutor forBackgroundTasks() { return mForBackgroundTasks; } public ThreadPoolExecutor forLightWeightBackgroundTasks() { return mForLightWeightBackgroundTasks; } public Executor forMainThreadTasks() { return mMainThreadExecutor; } //demo public void doSomeBackgroundWork() { DefaultExecutorSupplier.getInstance().forBackgroundTasks() .execute(new Runnable() { @Override public void run() { // do some background work here. } }); } //demo public void doSomeLightWeightBackgroundWork() { DefaultExecutorSupplier.getInstance().forLightWeightBackgroundTasks() .execute(new Runnable() { @Override public void run() { // do some light-weight background work here. } }); } //demo public void doSomeMainThreadWork() { DefaultExecutorSupplier.getInstance().forMainThreadTasks() .execute(new Runnable() { @Override public void run() { // do some Main Thread work here. } }); }}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月25日 13时27分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021-4-28【PTA】【L2-1 包装机 (25 分)】
2019-03-04
Arduino mega2560+MPU6050利用加速度值控制舵机
2019-03-04
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
2019-03-04
紫书——蛇形填数
2019-03-04
刷题计划1——poj1753
2019-03-04
蓝桥杯备战——刷题(2019)
2019-03-04
未定义的变量“py”或函数“py.command”
2019-03-04
最短路径问题—Dijkstra算法
2019-03-04
A Guide to Node.js Logging
2019-03-04
webwxbatchgetcontact一个神奇的接口
2019-03-04
Edge浏览器:你的的内核我的芯
2019-03-04
git命令升级版用法
2019-03-04
sed常用命令
2019-03-04
checksec未完待续~
2019-03-04
怎么去利用已有的数据做分析?
2019-03-04
【考研高数-高等数学-基础】第四章 不定积分
2019-03-04
【考研英语-基础-简单句】简单句的核心变化_谓语情态
2019-03-04
数据结构 第五章 二叉树-1
2019-03-04
PVE+集客AC+K2T-AP
2019-03-04
Jetson AGX Xavier硬件自启动
2019-03-04