此问题承接上篇socket文档。

https://blog.csdn.net/FloatFei/article/details/152208157?spm=1001.2014.3001.5502

创建如下线程池:

private fun createThreadPoolExecutor(): ThreadPoolExecutor {
        return ThreadPoolExecutor(
            10, 15,
            15L, TimeUnit.SECONDS,
            SynchronousQueue()
        )
    }
出现场景:
在app中使用了线程池,在车机系统自动切换主题时导致此问题,从日志中来看当前常驻线程为3且线程池未close,非常奇怪,当前没有深究到底是何原因触发此问题,有大佬知道可以留言下。

我这边目前是这么解决的,其中delayRunTask为重新执行任务

    private fun submitTask(runnable: Runnable): Future<*>? {
        val task = try {
            executorService.submit(runnable)
        } catch (e: RejectedExecutionException) {
            executorService = createThreadPoolExecutor()

            delayRunTask(runnable)
            null
        }
        return task
    }

private fun delayRunTask(runnable: Runnable) {
        scheduledExecutorService.schedule({
            try {
                executorService.submit(runnable)
            } catch (e: RejectedExecutionException) {
                e.printStackTrace()
            }
        }, 1200, TimeUnit.MILLISECONDS)
    }

private val scheduledExecutorService: ScheduledExecutorService =
        Executors.newScheduledThreadPool(1)

目前不知道有啥更好的办法来处理此问题,若有大佬有思路或者有解决方法可以留言哈。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐