對於一些學術研究,我需要模擬在一個處理器上運行多個線程。模擬線程調度的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中,你必須寫一些代碼行,你可以使用信號量和優先級隊列 –