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

用java模拟线程调度(无堆栈java?),java,scheduling,python-stackless,stackless,Java,Scheduling,Python Stackless,Stackless,对于一些学术研究,我需要模拟在单个处理器上运行的多个线程 我希望能够在代码中插入*call_scheduler()*调用,其中当前“线程”将暂停(记住它在哪个代码行中),一些调度函数将决定释放哪个线程 在python中,可以使用无堆栈python巧妙地实现这一点。有java替代方案吗 我可以使用真正的线程和一些消息队列(或管道)来实现它,它们一次只能运行一个线程,但这是一个丑陋且有问题的解决方案。您的问题: 我可以使用真正的线程和一些消息队列(或管道)来实现它,这将强制一次只运行一个线程——但这

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

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

在python中,可以使用无堆栈python巧妙地实现这一点。有java替代方案吗

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

您的问题:

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

如果您希望一次只运行一个线程,通过以更干净的方式控制对象上线程的访问,那么使用java.util.concurrent包中的
信号量。

sem=新信号量(1)//这里的1将标记只有一个线程可以访问


使用
sem.acquire()获取对象的密钥,完成后,使用sem.release()
则只有另一个线程可以访问此对象。

对于协作用户线程,您可以使用Apache javaflow continuations:


我很想知道如何用这个continuations包实现一个抢占式调度器

Scala actors框架,比如Akka,这样做。每个线程处理许多参与者,这就是他们如何如此高效地创建的。我建议看一下他们的源代码。

我认为在java中没有明确的方法可以做到这一点,你只需要写几行代码&你可以使用信号量和优先级队列,但我希望能够从调度程序线程控制哪个线程将继续-所以我需要一个信号量数组,每个线程一个。创建信号量的HashMap,这样你就可以通过它们的键来识别它们,就像first_thread一样,第二个线程…etcIs本机调度程序足够聪明,可以理解所有线程都在等待信号量,只有一个线程可以活动-因此没有理由暂停它?Kumar Vivek Mitra-每个线程和数组的唯一索引有什么问题?使用新的并发包,可以确保线程安全,就这样。。。。这就像如果你想要线程安全,就使用StringBuffer类,否则就使用StringBuilder。这里有相同的区别。