0
我正在爲Android開發一款相對較小的2D遊戲。爲了儘可能高效地處理碰撞檢測,我創建了多個線程來處理計算:Android,多線程,同步
線程#1:主要處理幀,將它們限制爲每秒X,處理位圖(旋轉,繪製。 ..) 線程#2:計算一些衝突 線程#3:計算其他衝突
我需要的是某種同步,但我不確定什麼是實現此目的的最佳方法。我認爲是這樣的:
線程#1:
public class Thread1 imlements Runnable {
public static ArrayList<Boolean> ResponseList = new ArrayList<Boolean>();
static {
ResponseList.add(0, false); // index 0 -> thread 1
ResponseList.add(1, false); // index 1 -> thread 2
}
public void run() {
boolean notFinished;
while(!isInterrupted() && isRunning) {
notFinished = true;
// do thread-business, canvas stuff, etc, draw
while(notFinished) {
notFinished = false;
for(boolean cur: ResponseList) {
if(!cur) notFinished = true;
}
// maybe sleep 10ms or something
}
}
}
}
而在其他的計算線程是這樣的:
public class CalcThread implements Runnable {
private static final INDEX = 0;
public void run() {
while(isRunning) {
ResponseList.set(INDEX, false);
executeCalculations();
ResponseList.set(INDEX, true);
}
}
}
或者,它會更快(因爲這是我m關心)使用Looper/Handler組合?剛剛閱讀了這個,但我不知道如何實現這一點。會更深入地看到這是更有效的方法。
好吧,但這意味着我將不得不重新創建每個幀的計算線程,不是嗎?我目前的設置有三個線程在任何時候運行..是否有任何方便的方法讓主線程等待兩個子線程完成,以及子線程等待,直到父線程「發信號」他們再次工作? – damian
我現在已經與CyclicBarrier解決了。似乎是正確的。但是謝謝你! – damian