2015-05-29 81 views
1

我讀這個類代碼:同步(...)代碼塊上使用var = Thread.currentThread()

public class MultiThreadedServer implements Runnable { 
    // some more code 
    protected Thread runningThread = null; 

    public void run() { 
     synchronized(this) { 
      this.runningThread = Thread.currentThread(); 
     } 
     // lots of code 
    } 
} 

這是什麼意思?線程本身被用作標誌來鎖定資源?我一點都不明白。

任何人都知道嗎?

+0

'// blablahbla' - '//很多blahblahblah'的 - 這是一個不走我的。 'this'指向'MultiThreadedServer'的實例,而不是線程(它具有無效的標識符) –

+3

我喜歡'protected Thread running = null;'的空間;' – Tschallacka

+0

它不使用線程作爲鎖,它使用Runnable對象。給多個線程的是同一個對象嗎? Runnable中是否有其他方法可以同步? –

回答

2

thisRunnable,而不是一個線程,因此在同步線程本身上完成的,你寫的。

它可能有點令人困惑,但如果是例如非常可行。該對象由多個併發線程訪問。

乾杯,

+1

因此它同步Runnable以避免同時訪問線程之間共享的run()方法? – Csi

+2

@Csi不是整個'run'方法,只有'synchronized(this)'塊 –

1

this.runningThread = Thread.currentThread();只是給你一個鏈接到當前線程。

這樣,您不必一直致電Thread.currentThread(),節省了方法調用開銷。

並且,呃,在protected Thread running thread = null;的空間不利於要麼...

+0

「runningThread」字段不僅僅是爲了方便,我高度懷疑它只用於'run'方法,尤其是因爲它被標記爲'protected'。 –

+0

啊,runningThread上的拼寫錯誤,抱歉。 – Csi