对于一些学术研究,我需要模拟在一个处理器上运行多个线程。模拟线程调度的Java(无堆叠java吗?)
我希望能够在我的代码中插入* call_scheduler()*调用,其中当前的“线程”将暂停(记住它在哪个代码行中),并且某个调度函数将决定放弃哪个线程。
在Python中,这可以用整齐的python无堆叠实现。有没有Java的选择?
我可以用真实的线程和一些消息队列(或管道),这将迫使只有一个线程在同一时刻运行实现它 - 但是这是一个丑陋的和有问题的解决方案。
对于一些学术研究,我需要模拟在一个处理器上运行多个线程。模拟线程调度的Java(无堆叠java吗?)
我希望能够在我的代码中插入* call_scheduler()*调用,其中当前的“线程”将暂停(记住它在哪个代码行中),并且某个调度函数将决定放弃哪个线程。
在Python中,这可以用整齐的python无堆叠实现。有没有Java的选择?
我可以用真实的线程和一些消息队列(或管道),这将迫使只有一个线程在同一时刻运行实现它 - 但是这是一个丑陋的和有问题的解决方案。
你的问题:
我用真实的线程和一些消息队列(或管道)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()
那么只有另外一个线程将获得访问该对象。
对于合作用户线程,你可以使用Apache javaflow延续: http://commons.apache.org/sandbox/javaflow/
我很想知道如何实现这一延续包
斯卡拉像阿卡演员框架为此抢占式调度。每个线程处理许多演员,这是他们如何有效地创建的。我建议看看他们的源代码。
我认为没有明确的方式来做到这一点在Java中,你必须写一些代码行,你可以使用信号量和优先级队列 –