2012-11-28 44 views
1

我有一些可以通過線程執行的可運行代碼。線程由多段代碼執行,我怎樣才能確保只有一個線程執行可在特定點運行的線程。只有一個線程的實例

我嘗試使用線程啓動時爲true的布爾值,並在線程結束時變爲false,但沒有幫助。

任何想法?

+0

@Luksprog no ...我已經把它作爲主類中的全局變量 – opc0de

+0

你需要澄清這個問題。 – auselen

+0

@auselen我認爲非常清楚,超過3人理解它;) – opc0de

回答

0
private class MyThread extends Thread 
{ 
    private static Lock lock = new ReentrantLock(); 

    public void run() 
    { 
     if (MyThread.lock.tryLock()) 
     { 
      try 
      { 
       // TODO something 
      } 
      finally 
      { 
       MyThread.lock.unlock(); 
      } 
     } 
    } 
} 
+0

您應該使用ReentrantLock而不是「同步」塊在這裏。 – anstarovoyt

+0

@Andrew。對不起,我不是很熟悉'ReentrantLock' ..請隨時編輯答案... – Madushan

+0

@Madushan如果我聲明靜態類比靜態類還要聲明爲靜態 – opc0de

2

-首先一個對象,多線程訪問的所有其資源。

-現在,如果你想要讓只有1線程訪問,在時間的一個實例的資源,那麼你可以做下面的操作* *

使用java.util.concurrent.Semaphore與數線程等於1,因此時間實例中只有一個線程可以訪問該資源。

如:

Semaphore s = new Semaphore(1);

2.您還可以使用SingleThreadExecutor,因爲它完成一個任務之前,在第二去和等。所以有不需要使用同步。

相關問題