我正在为Android开发一款相对较小的2D游戏。为了尽可能高效地处理碰撞检测,我创建了多个线程来处理计算:
线程#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);
}
}
}
或者使用Looper / Handler组合会更快(因为这是我所关注的)吗?刚看过这个,但我不确定如何实现这一点。更深入研究这将是更有效的方法。
答案 0 :(得分:0)
我不知道它是否会更快,但肯定会更可靠。例如,您正在使用来自多个线程的ArrayList而没有序列化,并且ArrayList不是线程安全的
处理程序只是可用机制之一,我建议你研究java.util.concurrent
- 重新发明轮子是没有意义的,许多同步原语已经可用。也许Future
对您有用
Future表示异步计算的结果。提供方法来检查计算是否完成,等待其完成,以及检索计算结果。