Android,多线程,同步

时间:2013-08-23 11:48:51

标签: android multithreading synchronization

我正在为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组合会更快(因为这是我所关注的)吗?刚看过这个,但我不确定如何实现这一点。更深入研究这将是更有效的方法。

1 个答案:

答案 0 :(得分:0)

我不知道它是否会更快,但肯定会更可靠。例如,您正在使用来自多个线程的ArrayList而没有序列化,并且ArrayList不是线程安全的

处理程序只是可用机制之一,我建议你研究java.util.concurrent - 重新发明轮子是没有意义的,许多同步原语已经可用。也许Future对您有用

  

Future表示异步计算的结果。提供方法来检查计算是否完成,等待其完成,以及检索计算结果。