Android,多线程,同步
我现在正在为Android开发一款相对较小的2D游戏。为了尽可能高效地处理碰撞检测,我创建了多个线程来处理计算: 线程#1:帧的主处理,将其限制为每秒X,处理位图(旋转、绘制…) 线程2:计算一些碰撞 线程#3:计算其他碰撞 我需要的是某种同步,但我不确定实现这一点的最佳方法是什么。我想到了这样的事情: 螺纹#1:Android,多线程,同步,android,multithreading,synchronization,Android,Multithreading,Synchronization,我现在正在为Android开发一款相对较小的2D游戏。为了尽可能高效地处理碰撞检测,我创建了多个线程来处理计算: 线程#1:帧的主处理,将其限制为每秒X,处理位图(旋转、绘制…) 线程2:计算一些碰撞 线程#3:计算其他碰撞 我需要的是某种同步,但我不确定实现这一点的最佳方法是什么。我想到了这样的事情: 螺纹#1: 或者使用活套/处理器组合会更快(因为这是我所关心的)?只是读了一下,但我还不确定如何实现。我会更深入地研究这是一种更有效的方法。我不知道它是否会更快,但肯定会更可靠。例如,您正在从多
或者使用活套/处理器组合会更快(因为这是我所关心的)?只是读了一下,但我还不确定如何实现。我会更深入地研究这是一种更有效的方法。我不知道它是否会更快,但肯定会更可靠。例如,您正在从多个线程使用ArrayList,但没有序列化,ArrayList不是线程安全的 Handler只是可用的机制之一,我建议您学习
java.util.concurrent
——没有必要重新发明轮子,许多同步原语已经可用。也许Future
对你有用
未来表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法
好吧,但这意味着我必须为每一帧重新创建计算线程,不是吗?我当前的设置始终有三个线程在运行。。有没有什么方便的方法让主线程等待两个子线程完成,同时让子线程等待父线程发出“信号”让它们再次工作?我现在已经用CyclicBarrier解决了这个问题。似乎是对的。但是谢谢你!
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);
}
}
}