この記事では、主に Java プログラミングにおけるミューテックス ロック、セマフォ、およびマルチスレッド待機メカニズムの例を紹介します。必要な方は、ミューテックス ロックとセマフォの違いについても簡単に説明します。
ミューテックス ロックとセマフォは、オペレーティング システムでの同時プログラミング用に設計された基本概念です。ミューテックス ロックとセマフォの概念的な違いは、同じリソースに対して、ミューテックス ロックには 0 と 1 の概念しかないことです。そこで止まらないでください。つまり、セマフォを使用すると、複数のスレッドが同時にリソースにアクセスできるようになりますが、同期されたものにアクセスする場合、Java でのミューテックスの実装は ReetranLock です。リソースの場合、そのオブジェクトは tryLock() メソッドを通じてこのロックを取得する必要があります。失敗した場合は false を返し、成功した場合は true を返します。返された情報に基づいて、同期されたリソースにアクセスするかどうかを決定します。以下の例を見てください
public class ReentranLockExample { private static int count = 0; private static ReentrantLock reentrantLock = new ReentrantLock(); static class MyThread extends Thread{ @Override public void run() { super.run(); try { while (true){ boolean result = reentrantLock.tryLock(); if (result){ System.out.println(Thread.currentThread().getName() + "get the lock success and run the syn code " + count ++); reentrantLock.unlock(); }else{ System.out.println(Thread.currentThread().getName() + "get the lock failed and run the syn code " + count); } System.out.println(Thread.currentThread().getName() + "run the asyntronized code " + count); Thread.sleep(500); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); thread1.start(); thread2.start(); } }
Java でのセマフォの実装は
です。これは、同期されたリソースへの最大同時アクセスを指定するために、初期化中に整数で渡されます
public class SemaphoreExample { private static Semaphore semaphore = new Semaphore(2); private String lock = "lock"; private static int count = 0; static class MyThread extends Thread { @Override public void run() { super.run(); try { while (true) { semaphore.acquire(); Thread.sleep(500); System.out.println(Thread.currentThread().getName() + "get the lock success and run the syn code " + count++); semaphore.release(); Thread.sleep(500); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args){ MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); MyThread thread3 = new MyThread(); thread1.start(); thread2.start(); thread3.start(); } }
概要
。
以上がJava におけるミューテックス セマフォとマルチスレッド待機機構の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。