我是.NET開發人員,但我必須在Java中爲Android做一些代碼。我需要運行4個計算操作,並且我想在單獨的線程中完成。我可以簡單地創建4個線程並運行它,但是當設備的內核少於4個時(例如1),它將會像在一個線程中運行一樣,甚至更低效。在C#中我可以創建行動的清單,然後就這樣運行在Parrarel:Android的Java運行列表在單獨的線程類似於C#風格
C#代碼:
var actions = new List<Action>
{
() => { // some action1},
() => { // some action2},
() => { // some action3},
() => { // some action4},
}
Parallel.ForEach(actions, new ParallelOptions { MaxDegreeOfParallelism = GetCoreCount() }, x => x());
,這將運行,這將保證每一個行動將是獨立的核心流程(更多收起)
我可以在Android上使用Java來做這種事嗎?
我不知道該如何開始。
只有一件事情出現在我的腦海裏,就是這樣的一些,但這是醜陋而無效的。
int cores = Runtime.getRuntime().availableProcessors();
if(cores = 1)
{
// Create 1 Thread with action1,action2,action3,action4
}
if(cores = 2)
{
// Create 1 Thread with action1,action2
// And Create 2nd Thread with action3,action4
}
if(cores = 3)
{
// Create 1 Thread with action1,
// And Create 2nd Thread with action2
// And Create 3rd Thread with action3
// Thread that first end his action will pick up Action4
}
if(cores >= 4)
{
// Create 1 Thread with action1,
// And Create 2nd Thread with action2
// And Create 3nd Thread with action3
// And Create 4th Thread with action4
}
見甚至沒有codded這看起來非常不明確和骯髒的(什麼時候我加5行動?或將有8作用和8個核?)
我可以做類似C#的東西嗎?動作和並行執行列表受核心數限制嗎?
謝謝:)建議
所以,如果我理解正確。即使當我創建比手機更多的線程將能夠處理它不會阻止和感謝threadPoolExecutor Android將能夠以最有效的方式控制Action的執行?我有4個動作,100%將阻止100%的每個CPU甚至在PC上 – Aht
我不認爲它會讓你阻止100%,系統總是運行。線程總是被阻塞,也就是說我們如何能夠由同一個處理器或一組處理器運行這麼多,他們通常不會長時間阻塞,除非他們在等待或睡眠。 – SBC