2013-01-15 63 views
0

我有一個類B有一個B類對象。 B類有一個布爾變量bool,A實例不斷更新(關閉事件)。 B對象b實現Runnable。在實現Runnable的類中分配變量的最快方法是什麼?

class A{ 
    private B b; 
} 

class B implements Runnable{ 
    private boolean bool; 

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

我認爲布爾布爾實際上是一個的線程,因爲它被初始化時,調用B的構造函數,而B線纔開始啓動被稱爲在B實例,並啓動不叫,直到在bool被初始化之後。

如果是這種情況,那麼b線程必須保留它自己的bool副本。如果是這樣的話,bool從b線程看到它的最快方式是什麼?使bool易變,還是有一些方法直接分配給b的副本?

請忘記循環,這是GLES20。我需要知道的是b是否具有bool副本,以及事件線程在GL線程上不斷更新布爾值的最快方式。

+0

我不知道忙等待是一個好主意。這裏的信號量肯定會更好。 – Ivan

+0

你可能想寫一些類似觀察者模式而不是while循環。還要看看'PropertyChangeEvent'事件。 – Ankit

回答

1

如果在某個階段讀取和寫入變量可能位於不同的線程上,則需要某種形式的同步。在這種情況下,最明智的選擇是:

但是,根據你的使用情況進行bool揮發性

  • ,有可能是一個更好的方式使用,以實現自己的目標適當的併發對象(例如鎖存器,信號量或隊列),並避免繁忙的等待,這將不必要地使用許多CPU週期。

  • 相關問題