我有一些可以通過線程執行的可運行代碼。線程由多段代碼執行,我怎樣才能確保只有一個線程執行可在特定點運行的線程。只有一個線程的實例
我嘗試使用線程啓動時爲true的布爾值,並在線程結束時變爲false,但沒有幫助。
任何想法?
我有一些可以通過線程執行的可運行代碼。線程由多段代碼執行,我怎樣才能確保只有一個線程執行可在特定點運行的線程。只有一個線程的實例
我嘗試使用線程啓動時爲true的布爾值,並在線程結束時變爲false,但沒有幫助。
任何想法?
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();
}
}
}
}
您應該使用ReentrantLock而不是「同步」塊在這裏。 – anstarovoyt
@Andrew。對不起,我不是很熟悉'ReentrantLock' ..請隨時編輯答案... – Madushan
@Madushan如果我聲明靜態類比靜態類還要聲明爲靜態 – opc0de
-首先一個對象,多線程訪問的所有其資源。
-現在,如果你想要讓只有1線程訪問,在時間的一個實例的資源,那麼你可以做下面的操作* : *
使用java.util.concurrent.Semaphore
與數線程等於1,因此時間實例中只有一個線程可以訪問該資源。
如:
Semaphore s = new Semaphore(1);
2.您還可以使用SingleThreadExecutor
,因爲它完成一個任務之前,在第二去和等。所以有不需要使用同步。
@Luksprog no ...我已經把它作爲主類中的全局變量 – opc0de
你需要澄清這個問題。 – auselen
@auselen我認爲非常清楚,超過3人理解它;) – opc0de