线程池

来源:互联网 发布:海信网络机顶盒ip906h 编辑:程序博客网 时间:2024/06/01 10:01

1.耗时操作和更新UI

public class ThreadUtil {   /**     * 指定runnable 的run 方法在子线程执行 runnable 理解为线程任务     * OOM     */public static void runOnThread(Runnable runnable) {                    ThreadPoolManager.getInstance().create().execute(runnable);    } private static Handler sHandler = new Handler();    /**     * 将runnable 的run方法放在主线程执行     */    public static void runOnUIThread(Runnable runnable) {        sHandler.post(runnable);    }}

2.线程的最大值和初始化值

public class ThreadPoolManager {    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();    private static final int CORE_POOL_SIZE = CPU_COUNT + 1;    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;    private ThreadPoolProxy proxy;    private static ThreadPoolManager instance = new ThreadPoolManager();    private ThreadPoolManager() {    }    //第一步,获取线程管理器    public static ThreadPoolManager getInstance() {        return instance;    }    /**     * 第二步,线程管理器,获取线程池 ,并初始化线程的,初始值和最大值     * 效率最高  cpu*2+1     *     * @return     */    public ThreadPoolProxy create() {        if (proxy == null) {            proxy = new ThreadPoolProxy(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE);        }        return proxy;    }    public class ThreadPoolProxy {        ThreadPoolExecutor threadPool;        int corePoolSize;        int maximumPoolSize;        public ThreadPoolProxy(int corePoolSize, int maximumPoolSize) {            this.corePoolSize = corePoolSize;            this.maximumPoolSize = maximumPoolSize;        }        /**         * 第三步,线程池开启线程,并执行线程任务         * 执行线程任务         *         * @param runnable         */        public void execute(Runnable runnable) {            if (threadPool == null) {                 threadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 5000,                        TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(128));            }            //执行线程任务            threadPool.execute(runnable);        }        /**         * 取消线程任务         */        public void cancel(Runnable runnable) {            //isTerminated() isShutdown() 线程池 不停止            if (threadPool != null && !threadPool.isTerminated() && !threadPool.isShutdown()) {                //移除线程任务                threadPool.remove(runnable);            }        }    }}
原创粉丝点击