私は最近使用してJava Threads
いて、コードのブロックを「シングル」と呼ばれる1つのスレッドのみで実行されるように制限できるメソッドを実装しようとしています。
私がすでに実装した素朴な解決策は次のとおりです。
if(readFlag())
{
synchronized(this)
{
flag = false;
// do some work
}
}
どこ :
public Boolean synchronized readFlag() {return flag;}
この素朴な解決策は、1 つの「単一」ブロックに対してのみ正常に機能しますが、複数の「単一」コード ブロックを使用しようとすると問題が発生します。異なるスレッドが異なる「単一の」コードブロックを同時に入力する可能性があるため、同じフラグを使用することはできません。
別の解決策として、"単一" ごとに 1 つのフラグ変数の配列を使用することもできますが、この解決策では、ループ内で "単一" コード ブロックを実行するときに問題が発生する (またはバリアを使用する必要がある) だけでなく、柔軟性があまり高くありません。
私の質問は:
このソリューションを改善して、さまざまな「単一」コード ブロックの実行を許可し、同じ単一コード ブロックを複数回実行できるようにするにはどうすればよいでしょうか (たとえば、ループ内の単一コード ブロック)。