我有一个有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线程上连续更新布尔值的最快方法是什么。
答案 0 :(得分:1)
如果在某个阶段对变量的读取和写入可以在不同的线程上,则需要某种形式的同步。在这种情况下,最明智的选择是:
bool
易变的AtomicBoolean
但是,根据您的使用情况,可能有更好的方法通过使用适当的并发对象(例如锁存器,信号量或队列)来实现您的目标,并避免繁忙的等待,这将使用许多CPU周期不必要的。
答案 1 :(得分:0)
Java的Exchanger似乎是我需要的。它在线程之间设置一个对象,而不是在每个事务中生成一个新对象,并在事务之后对其进行GC操作。
这里有一个很好的解释和代码:
http://www.javacodegeeks.com/2011/09/exchanger-and-gc-less-java.html