在实现Runnable的类中分配变量的最快方法是什么?

时间:2013-01-15 23:24:29

标签: java android

我有一个有B类对象的A类。 B类有一个布尔变量bool,A实例不断更新(关闭事件)。 B对象b实现了Runnable。

class A{
  private B b;
}

class B implements Runnable{
  private boolean bool;

  run(){
    while(true){
      if(bool){//do something}
    }
  }
}

我假设布尔bool实际上是在一个线程上,因为它在调用B的构造函数时被初始化,并且b线程在b实例上调用start之前不会开始,并且直到bool之后才调用start初始化。

如果是这种情况,那么b线程必须保留自己的bool副本。如果是这种情况,那么从b线程中看到bool的最快方法是什么?使bool易变,还是有某种方法直接分配给b的副本?

请忘记循环,它适用于GLES20。我需要知道的是b是否有它的bool副本,以及事件线程在GL线程上连续更新布尔值的最快方法是什么。

2 个答案:

答案 0 :(得分:1)

如果在某个阶段对变量的读取和写入可以在不同的线程上,则需要某种形式的同步。在这种情况下,最明智的选择是:

但是,根据您的使用情况,可能有更好的方法通过使用适当的并发对象(例如锁存器,信号量或队列)来实现您的目标,并避免繁忙的等待,这将使用许多CPU周期不必要的。

答案 1 :(得分:0)

Java的Exchanger似乎是我需要的。它在线程之间设置一个对象,而不是在每个事务中生成一个新对象,并在事务之后对其进行GC操作。

这里有一个很好的解释和代码:

http://www.javacodegeeks.com/2011/09/exchanger-and-gc-less-java.html