スレッドを介して実行される実行可能なコードがいくつかあります。スレッドは複数のコードによって実行されます。特定の時点で実行可能なスレッドが1つだけであることを確認するにはどうすればよいですか。
スレッドの開始時にtrueで、スレッドの終了時にfalseになるブール値を使用してみましたが、役に立ちませんでした。
何か案は?
スレッドを介して実行される実行可能なコードがいくつかあります。スレッドは複数のコードによって実行されます。特定の時点で実行可能なスレッドが1つだけであることを確認するにはどうすればよいですか。
スレッドの開始時にtrueで、スレッドの終了時にfalseになるブール値を使用してみましたが、役に立ちませんでした。
何か案は?
-まず、複数のスレッドがアクセスするオブジェクトのリソースです。
-一度に 1 つのスレッドのみがそのリソースにアクセスできるようにしたい場合は、次のようにすることができます* : *
1.スレッド数が 1 の場合に使用java.util.concurrent.Semaphore
するため、一度に 1 つのスレッドのみがそのリソースにアクセスできます。
例えば:
Semaphore s = new Semaphore(1);
2.を使用することもできます。SingleThreadExecutor
これは、1 つのタスクを完了してから 2 番目のタスクに進むなどです。したがって、同期を使用する必要はありません。
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();
}
}
}
}