セマフォは、Java 同時プログラミングにおけるマルチスレッド リソース アクセスを制御するためのメカニズムであり、ライセンス数は初期化時に指定され、スレッドが同時にアクセスできる保護されたリソースの数を示します。スレッドがリソースにアクセスしようとすると、ライセンスの取得を試行します。ライセンスが使用できない場合、ライセンスが使用可能になるまでスレッドはブロックされます。
セマフォは Java 同時プログラミングにおける重要なメカニズムであり、マルチスレッド シナリオでリソース アクセスを制御するために使用されます。これは、リソースを保護する共有データ構造のライセンスを作成することによって行われます。
セマフォは初期化時にライセンス数を指定します。これは、保護されたリソースに同時にアクセスできるスレッドの最大数を示します。スレッドがリソースにアクセスしようとすると、セマフォ上のライセンスを取得しようとします。利用可能な場合、ライセンスが付与され、スレッドはリソースにアクセスできるようになります。使用可能なライセンスがない場合、ライセンスが使用可能になるまでスレッドはブロックされます。
共有リソース、つまりキューがあると仮定します。キューに同時にアクセスできるスレッドは 5 つだけです。これを確実にするためにセマフォを使用できます:
import java.util.concurrent.Semaphore; import java.util.Queue; public class Example { private static final int MAX_ACCESS_COUNT = 5; private static Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT); private static Queue<Integer> queue = new ConcurrentLinkedQueue<>(); public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(() -> accessQueue()).start(); } } private static void accessQueue() { try { // 尝试获取一个许可证 semaphore.acquire(); // 访问队列 queue.add((int) (Math.random() * 100)); // 释放许可证 semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }
この例では、セマフォは 5 つのライセンスで初期化されます。これにより、キューに同時にアクセスできるスレッドは最大 5 つだけになります。ライセンスが利用可能になるまで、他のスレッドはブロックされます。
セマフォは、共有リソースへの同時アクセスを制御するのに非常に役立ちます。リソースに同時にアクセスできるスレッドの数を制限することで、データの競合や不整合を防ぐのに役立ちます。
以上がJava 関数の同時実行性とマルチスレッドにおけるセマフォの役割は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。