在 java 中模拟线程调度(无堆栈 java?)



对于一些学术研究,我需要模拟在单个处理器上运行的多个线程。

我希望能够在我的代码中插入 *call_scheduler()* 调用,其中当前的"线程"将暂停(记住它在哪个代码行中),并且一些调度函数将决定放弃哪个线程。

在python中,这可以使用无堆栈python巧妙地实现。有没有Java替代方案?

我可以使用真正的线程和一些消息队列(或管道)来实现它,这些队列一次只会强制一个线程运行 - 但这是一个丑陋且有问题的解决方案。

对于合作用户线程,您可以使用 Apache javaflow 延续:http://commons.apache.org/sandbox/javaflow/

我有兴趣知道如何使用此延续包实现抢占式调度程序

Akka这样的Scalaactor框架就是这样做的。每个线程处理许多Actor,这就是他们如此高效地创建的方式。我建议看看他们的源代码。

你的问题:

我可以使用真正的线程和一些消息传递队列(或管道)来实现它 that will force only one thread to run at a time - 但这是一个丑陋且有问题的解决方案

好吧,如果您希望一次只运行一个线程,则通过以更简洁的方式控制线程对对象的访问,请使用Semaphores in java.util.concurrent package.

Semaphores sem = new Semaphores(1);//此处的 1 将标记只有一个线程可以访问

使用 sem.acquire() to get the key of the object, and when its done, use sem.release() 则只有另一个线程可以访问此对象。

最新更新