2012-06-16 53 views
3

對於一些學術研究,我需要模擬在一個處理器上運行多個線程。模擬線程調度的Java(無堆疊java嗎?)

我希望能夠在我的代碼中插入* call_scheduler()*調用,其中當前的「線程」將暫停(記住它在哪個代碼行中),並且某個調度函數將決定放棄哪個線程。

在Python中,這可以用整齊的python無堆疊實現。有沒有Java的選擇?

我可以用真實的線程和一些消息隊列(或管道),這將迫使只有一個線程在同一時刻運行實現它 - 但是這是一個醜陋的和有問題的解決方案。

+0

我認爲沒有明確的方式來做到這一點在Java中,你必須寫一些代碼行,你可以使用信號量和優先級隊列 –

回答

0

你的問題:

我用真實的線程和一些消息隊列(或管道)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()那麼只有另外一個線程將獲得訪問該對象。

+0

但我希望能夠從調度程序線程控制哪個線程將繼續 - 所以我需要一個信號量數組,每個線程一個。 – Oren

+0

創建信號量的HashMap,所以你可以通過它們的鍵標識它們,比如first_thread,second_thread ... etc –

+0

本機調度程序是否足夠聰明,足以理解所有線程正在等待信號量,並且只有一個線程可以處於活動狀態 - 所以沒有理由暫停它? – Oren

1

斯卡拉像阿卡演員框架爲此搶佔式調度。每個線程處理許多演員,這是他們如何有效地創建的。我建議看看他們的源代碼。