Android,多线程,同步

Android,多线程,同步,android,multithreading,synchronization,Android,Multithreading,Synchronization,我现在正在为Android开发一款相对较小的2D游戏。为了尽可能高效地处理碰撞检测,我创建了多个线程来处理计算: 线程#1:帧的主处理,将其限制为每秒X,处理位图(旋转、绘制…) 线程2:计算一些碰撞 线程#3:计算其他碰撞 我需要的是某种同步,但我不确定实现这一点的最佳方法是什么。我想到了这样的事情: 螺纹#1: 或者使用活套/处理器组合会更快(因为这是我所关心的)?只是读了一下,但我还不确定如何实现。我会更深入地研究这是一种更有效的方法。我不知道它是否会更快,但肯定会更可靠。例如,您正在从多

我现在正在为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);
        }
    }
}