【发布时间】:2016-11-25 20:31:55
【问题描述】:
我正在尝试使用红黑树构建调度程序。 该树将具有准备好执行的所有可运行任务。我计划编写自己的调度函数,将树中的任务之一分配给四个工作线程之一。每个线程都会定期访问调度程序以查看它是否必须继续相同的任务或切换到新任务。 现在,我怎样才能让线程停止特定任务并为其分配新任务。 暂停的任务返回树并等待其他线程继续执行。
为了简单起见,假设我没有任何变量/数据要从暂停的任务中存储。
我看到的所有资源要么使用 java 执行器服务,要么只是将单个任务分配给线程。所以,我需要一些帮助......
【问题讨论】:
-
简单:没办法。您可以获得的最接近的是一个特定的任务接口,每个方法调用只做一些工作。当方法返回时,您可以进行检查。
-
当你说:“每个线程都会定期访问调度器,看看它是否必须继续同一个任务或切换到新任务”,这意味着代码任务本身会定期调用某种
yield函数,以允许自己被换出。如果是这样,这将成为一个更可行的问题。 -
或者每个任务可以是它自己的线程并允许调度程序(在它自己的线程上运行)只在每个任务线程上调用
suspend和resume以确保在任何给定的情况下只有 4 个正在运行片刻?suspend和resume在 Java 中已被弃用,但如果这是为了学术练习,它们可能对简单的设计很有用。 -
澄清一下,假设我有 4 个线程,但我可能有 24 个任务要执行。所有的任务都应该由这 4 个工作线程公平地执行。因此,我认为有一种方法可以为给定线程切换任务。
-
现在您应该知道有抢占式和协作式多任务处理,而抢占式需要 CPU 的帮助。您的操作系统已经在使用 CPU,因此您的调度程序只能使用协作多任务...
标签: java multithreading