Java での同時プログラミングでは、セマフォを使用して共有リソースへのアクセスを制御できます。具体的な手順には、セマフォの作成、セマフォの取得 (使用可能な場合は続行、使用できない場合はブロック)、およびセマフォの解放が含まれます。実際のケースでは、セマフォを使用してプリンタへのアクセスを制御し、一度に 1 つのスレッドのみが印刷できるようにします。
Java でセマフォを使用して同時プログラミングを実装する方法
Java では、セマフォは共有リソースへのアクセスを制御できる同時プログラミングのプリミティブです。セマフォは、リソースの利用可能な量を表すカウンターを維持することによって実装されます。スレッドはリソースにアクセスする必要がある場合、セマフォを取得しようとします。セマフォが使用可能な場合、スレッドは実行を続行できます。それ以外の場合、スレッドはセマフォが使用可能になるまでブロックされます。
セマフォの実装
Java の Semaphore
クラスは、セマフォの実装を提供します。次の手順を使用してセマフォを作成できます: Semaphore
类提供了一个信号量的实现。我们可以使用以下步骤创建一个信号量:
import java.util.concurrent.Semaphore; public class MySemaphore { private Semaphore semaphore; public MySemaphore(int permits) { semaphore = new Semaphore(permits); } public void acquire() throws InterruptedException { semaphore.acquire(); } public void release() { semaphore.release(); } }
实战案例
考虑以下场景:我们有一个共享的打印机,并且有多个线程需要使用它。为了防止线程同时访问打印机,我们将使用信号量来控制对打印机的访问。
import java.util.concurrent.Semaphore; public class Printer { private Semaphore semaphore = new Semaphore(1); public void print(String document) { try { semaphore.acquire(); // 打印文档 } finally { semaphore.release(); } } } public class Main { public static void main(String[] args) { Printer printer = new Printer(); Thread thread1 = new Thread(() -> printer.print("Document 1")); Thread thread2 = new Thread(() -> printer.print("Document 2")); thread1.start(); thread2.start(); } }
在这个示例中,我们创建了一个 Printer
类,该类包含一个 Semaphore
实例。print
方法使用 acquire
方法获取信号量,仅当信号量可用时才允许线程继续执行。最后,release
rrreee
Semaphore
インスタンスを含む Printer
クラスを作成します。 print
メソッドは、acquire
メソッドを使用してセマフォを取得し、セマフォが利用可能な場合にのみスレッドが実行を継続できるようにします。最後に、release
メソッドは、印刷完了後にセマフォを解放し、他のスレッドがプリンターを使用できるようにします。 🎜以上がJava でセマフォを使用して同時プログラミングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。