2012-12-04 42 views
2

與代碼如爪哇同步塊和匿名類

synchronized (this) 
{ 
    mTimeOutRunnable = new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      ..some code 
     } 
    }; 
} 

Runnable類的參考assignement由塊所覆蓋,但將進行編碼的內部的run()(其是asyncronously稱爲外塊)還輸入​​塊嗎?

因爲這是從工作者線程調用的,我首先將其包裝在同步塊中,並且我想確保調用(主)線程也可以訪問mTimeOutRunnable對象。

+1

爲什麼你會被製作一段代碼線程,但隨後要求其進行同步,即一次只有一個線程在使用它? – amphibient

+0

對不起,這裏的run()方法內部的代碼並不是在我的工作線程上調用的 - 這會傳遞給一個'Looper'(Android),它將在主線程上調用。上面的整個代碼在工作線程上,但是 – Dori

+0

(注意'Runnable'中的'this'''和外部的''this''不同,所以'synchronized(this){}'將鎖定不同的對象,所以不會按預期工作。) –

回答

5

不,只有RunnablemTimeOutRunnable的分配由​​塊覆蓋,而不是隨後調用run()方法。

+0

+1優秀,這就是我希望的!謝謝 – Dori

+0

不客氣! – Keppil

1
mTimeOutRunnable = new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      ..some code 
     } 
    }; 

是相同

synchronized(this){ 
    obj = new SomeClass(); 
} 

所以只有參考分配由​​塊覆蓋