kotlin 线程管理工具类 ThreadPoolManager

线程工具类


/**
 * Created  on 2019/1/3
 * @author lyj
 * Function
 */
class ThreadPoolManager {

    companion object {
        @Volatile
        private var mLongPool: ThreadPoolProxy? = null
        private val mLongLock = Any()

        @Volatile
        private var mShortPool: ThreadPoolProxy? = null
        private val mShortLock = Any()
        fun getLongPool(): ThreadPoolProxy? {
            if (mLongPool == null) {
                synchronized(mLongLock) {
                    if (mLongPool == null) {
                        mLongPool = ThreadPoolProxy(3, 3, 30000)
                    }
                }
            }
            return mLongPool
        }

        fun getShortPool(): ThreadPoolProxy? {
            if (mShortPool == null) {
                synchronized(mShortLock) {
                    if (mShortPool == null) {
                        mShortPool = ThreadPoolProxy(3, 3, 0)
                    }
                }
            }
            return mShortPool
        }
    }


    class ThreadPoolProxy (private val mCoreSize: Int, private val mMaxSize: Int, private val mKeepLive: Long) {
        private var mExecutor: ThreadPoolExecutor? = null

        private fun checkPool() {
            if (mExecutor == null || mExecutor!!.isShutdown) {

                val unit = TimeUnit.MILLISECONDS
                val mWorkQueue = LinkedBlockingDeque<Runnable>()
                val mFactory = Executors.defaultThreadFactory()
                val mHandler = ThreadPoolExecutor.AbortPolicy()

                mExecutor = ThreadPoolExecutor(mCoreSize, mMaxSize, mKeepLive, unit, mWorkQueue, mFactory,
                        mHandler)
            }

        }

        fun exec(task: Runnable?) {
            if (task == null) {
                return
            }

            checkPool()

            mExecutor!!.execute(task)
        }

        fun submit(task: Runnable?): Future<*>? {
            if (task == null) {
                return null
            }

            checkPool()
            return mExecutor!!.submit(task)
        }

        fun remove(task: Runnable?) {
            if (task == null) {
                return
            }
            checkPool()
            mExecutor!!.remove(task)
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值