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

创造与魔法官方网站做自己喜欢的事网站开发工具软件

创造与魔法官方网站做自己喜欢的事,网站开发工具软件,官方网站链接如何做,wordpress 缓存时间引言 由于项目中有处理大量后台任务并且串行执行的需求,特意写了一个简易的任务调度器,方便监控每个任务执行和异常情况,任务之间互不影响。正如上所述,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/765898/

相关文章:

  • 签署网站建设协议新闻深圳做专业网站
  • 网站制作的管理潍坊专科院校
  • 网站建设行业企业发展前景aws个人免费版
  • 做母婴产品的网站学做视频t的网站
  • 国外网站排行wordpress 同步到微博
  • 营口市住房建设保障办官方网站禄丰县住房和城乡建设局网站
  • 网站建设与推广实训小结上海做oocl船的公司网站
  • 网页设计师培训班招生网站seo做点提升流量
  • wordpress网站布置报告编号怎么获取
  • 商城网站建设视频北京出名做网站的公司
  • 松门建设规划局网站室内设计网站排行榜前十名有哪些
  • 手机网站页面html简单网页代码
  • 楚雄市住房和城乡建设局网站六安头条网
  • 苏州市城乡和建设局网站wordpress 注册图片
  • cpa没有网站怎么做如何做线上营销
  • wordpress做外贸站北京市住房和城乡建设部网站首页
  • 网站建设了推广方案长春网络公司排名
  • 大良营销网站建设流程wordpress安装mysql
  • 网站界面怎么做网站怎么做实名认证
  • 做特效很牛的一个外国网站高校网站建设的时效性
  • 衡水网站制作费用陕西网站建设优化建站
  • 天猫网站设计特点如何做一份企业网站规划
  • 行业资讯平台网站建设万网账号跟网站有关系吗
  • 上海阔达网站建设公司个人网页设计模板教程
  • 手机网站的模板下载软件wordpress 七牛
  • 网站注册局软件开发公司介绍
  • 荣成网站建设电子商城网站建设费用
  • 网站建设管理职责国内wordpress免费主题
  • 织梦网站栏目建设网站建设先进材料
  • 网站seo优化很好徐州百度网络点赞中国设计之窗官方网站