当前位置: 首页 > news >正文

广西壮族自治区住房和城乡建设厅网站域名和空间网站

广西壮族自治区住房和城乡建设厅网站,域名和空间网站,网络广告营销实现方式解读,如何建立公司网站账号引言 由于项目中有处理大量后台任务并且串行执行的需求,特意写了一个简易的任务调度器,方便监控每个任务执行和异常情况,任务之间互不影响。正如上所述,Kotlin中的TaskScheduler类提供了一个强大的解决方案,用于使用S…

引言

由于项目中有处理大量后台任务并且串行执行的需求,特意写了一个简易的任务调度器,方便监控每个任务执行和异常情况,任务之间互不影响。正如上所述,Kotlin中的TaskScheduler类提供了一个强大的解决方案,用于使用ScheduledExecutorService异步地排队和执行任务。


使用方法

1.初始化:

val taskListener = object : TaskScheduler.TaskListener {override fun beforeExecute(task: TaskScheduler.NamedRunnable) {println("开始任务:${task.name}")}override fun afterExecute(task: TaskScheduler.NamedRunnable, exception: Exception?) {println("完成任务:${task.name},异常:$exception")}
}
val scheduler = TaskScheduler(taskListener, 5)

2.提交任务:

scheduler.submit("加载数据") {// 加载数据的代码
}
scheduler.submit("处理数据") {// 处理数据的代码
}

3.优雅关闭:

当所有任务完成后,调度器将在指定的超时后自动关闭,确保不浪费资源。


完整代码

import java.util.concurrent.*
import java.util.concurrent.atomic.AtomicBooleanclass TaskScheduler(private val listener: TaskListener? = null, private val timeout: Long = 5) {private val taskQueue = ConcurrentLinkedQueue<NamedRunnable>()private val isTaskRunning = AtomicBoolean(false)private var executorService: ScheduledExecutorService? = null@Synchronizedfun submit(name: String, task: Runnable) {ensureExecutorService()taskQueue.offer(NamedRunnable(name, task))if (isTaskRunning.compareAndSet(false, true)) {executorService?.submit { processTasks() }}}private fun processTasks() {try {while (taskQueue.isNotEmpty()) {val nextTask = taskQueue.poll()listener?.beforeExecute(nextTask)var exception: Exception? = nulltry {nextTask.run()} catch (e: Exception) {exception = e}listener?.afterExecute(nextTask, exception)}} finally {isTaskRunning.set(false)scheduleShutdown()}}private fun ensureExecutorService() {if (executorService == null || executorService!!.isShutdown) {executorService = Executors.newSingleThreadScheduledExecutor()println("ensureExecutorService newSingleThreadScheduledExecutor")}}private fun scheduleShutdown() {executorService?.schedule({if (taskQueue.isEmpty() && isTaskRunning.compareAndSet(false, true)) {executorService?.shutdown()executorService = nullprintln("scheduleShutdown shutdown")} else {isTaskRunning.set(false)  // 确保新任务可以触发执行器重启}}, timeout, TimeUnit.SECONDS)}interface TaskListener {fun beforeExecute(task: NamedRunnable)fun afterExecute(task: NamedRunnable, exception: Exception?)}class NamedRunnable(val name: String, private val task: Runnable) : Runnable {override fun run() {task.run()}}
}

最后

简要概括下优缺点:

  • 资源自动管理,超时自动释放资源
  • 任务命名,更清晰的了解每个任务执行情况
  • 线程安全,不用担心多线程添加任务导致顺序紊乱

优点:

  • 灵活性:允许动态添加任务,并根据任务负载需要创建或关闭执行器,从而管理执行器的生命周期。

缺点:

  • 单线程限制:当前实现使用单线程执行器,这意味着任务是顺序执行的,而不是并行执行。这可能是CPU密集型任务的瓶颈。
http://www.yayakq.cn/news/810871/

相关文章:

  • 网站设计总结wordpress开启xml-rpc
  • 网站首页设计多少钱做网站建设哪家效益快
  • 做美食的网站有哪些青州专业网站建设
  • 优秀的网站开发WordPress不用缓存插件
  • 网站建设找谁好游戏企业用什么程序做网站
  • 自贡百度做网站多少钱wordpress trac
  • 企业营销型网站团队北京互联网金融公司排名
  • 医院网站备案流程网站常用字体
  • 南京安居建设集团网站阿里wordpress怎么安装教程
  • 如何自己做网站挣钱城阳网站建设
  • 怎样看网站做的好不好南京公司网站建立
  • 代做财务报表分析网站百度优化推广
  • 贵州省建设厅审图网站logo制作方法
  • 四川建设网站官网免费无代码开发平台排行榜
  • 企业网站分析报告平面设计就业方向有哪些
  • 杭州市建设监理协会网站展厅施工公司
  • 网站建设及运营 经营范围除了WordPress等
  • 网络营销怎么做网站wordpress里的站点标题是什么意思
  • 如何让自己的网站被搜索引擎收录wordpress文章列表显示摘要
  • 合肥外贸网站建设全国文明城市创建标准
  • 合肥建网站公司旅游网站建设的相关报价
  • 东莞设计兼职网站建设廊坊建设银行网站
  • 学vue可以做pc网站企业网上登记注册平台
  • wordpress个人建站教程wordpress数据清除缓存
  • 网站做301根目录在哪里怎么验证网站
  • php网站开发招招聘net开发网页小程序
  • 网站首页被k 做跳转做影视网站需要的软件
  • 专业的培训行业网站制作沧州网站建设运营公司
  • 网站开发的需求分析论文网站制作五个界面
  • 达建网站防止爬虫的办法交互网站 百度