Javaのセマフォとは何ですか?その使用方法は?
公開: 2022-05-261995年のSunMicrosystemsは、Javaをもたらしました。これは、クラスとオブジェクトに依存する協調的なプログラミング言語であり、コンピュータプラットフォームでした。 Javaをインストールしないと、膨大な数のプログラムやWebサイトが動作せず、日々開発が進んでいます。 Javaは、その高速性、セキュリティ、および信頼性で販売され、賞賛されています。 これは、インターネットの分散した世界で使用するために特別に作成されたコンピューター言語です。 これは、C ++プログラミング言語の設計を念頭に置いて作成されましたが、使いやすく、オブジェクト指向プログラミングアプローチを採用しています。
ソフトウェア開発のエグゼクティブPGプログラムは、Javaで卓越するために必要なすべてのスキルを正確に教えます。
セマフォの例:
共有変数ミューテックス:セマフォ= 1;
プロセスi
始める
。
。
P(ミューテックス);
CSを実行します。
V(ミューテックス);
。
。
終わり;
Javaを際立たせるものは何ですか?
Java開発者、アーキテクト、および愛好家の熱心なコミュニティは、Javaをテスト、洗練、拡張、および検証してきました。 ほぼ20年前のルーツにもかかわらず、Javaは何年にもわたって着実に進化してきました。
Javaは、さまざまなコンピュータシステム向けのポータブルで高性能なプログラムの開発を容易にすることを目的としているため、アクセシビリティとクロスプラットフォームの相互作用を包含するという本質的な概念をサポートします。 企業は、追加のサービスを提供し、エンドユーザーの生産性、コミュニケーション、およびコラボレーションを向上させ、異種の設定で利用できるようにすることで、エンタープライズアプリケーションとコンシューマーアプリケーションのコストを大幅に削減できます。
Javaのセマフォとは何ですか?
セマフォは、カウンタを使用して共有リソースへのアクセスを規制します。 カウンターがゼロより大きい場合、アクセスが許可されます。 値が0の場合、アクセスは拒否されます。 カウンターは、共有リソースへのアクセスを提供する許可をカウントします。 その結果、リソースにアクセスするには、スレッドは最初にセマフォから許可を取得する必要があります。
それはどのように機能しますか?
通常、セマフォを使用している間、共有リソースにアクセスしようとしているスレッドはアクセス許可を取得しようとします。 セマフォ数がゼロより大きい場合、スレッドは許可を取得し、セマフォ数を減らします。 そうでない場合、許可が得られるまでスレッドは停止されます。
スレッドが共有リソースへのアクセスを必要としなくなると、許可が解放され、セマフォ数が増加します。 別のスレッドが許可を待っている場合、そのスレッドはその時点で許可を取得します。
セマフォの種類
Javaには4つのタイプのセマフォがあります。 それらは次のとおりです。
バイナリセマフォ:
バイナリセマフォは、値として0と1のみを受け入れ、相互排除を作成し、同時アクティビティを同期するために使用されます。
バイナリセマフォの例:
パブリッククラスBinarySemaphoreExample
{{
プライベートブールロック=false;
BinarySemaphore(int initial)
{{
ロック=(初期== 0);
}
public synchronized void waitForNotify()throws InterruptedException
{{
(ロックされている)
{{
待つ();
}
ロック=true;
}
public synchronized void notifyToWakeup()
{{
if(ロック)
{{
notify();
}
ロック=false;
}
}
ソフトウェア開発に関連する人気の記事を読む
Javaでデータ抽象化を実装する方法は? | Javaの内部クラスとは何ですか? | Java識別子:定義、構文、および例 |
例を使用してOOPSでのカプセル化を理解する | Cでのコマンドライン引数の説明 | 2022年のクラウドコンピューティングのトップ10の機能と特徴 |
Javaのポリモーフィズム:概念、タイプ、特性、例 | Javaのパッケージとその使用方法 | 初心者向けのGitチュートリアル:最初からGitを学ぶ |
セマフォを数える:
カウントセマフォの値は、常に重要な領域に同時にアクセスできるプロセスの最大数を表します。
セマフォのカウント例:
パブリッククラスCountingSemaphoreExample
{{
private int signal = 0;
public synchronized void take()
{{
this.signal ++;
this.notify();
}
public synchronized void release()はInterruptedExceptionをスローします
{{
while(this.signal == 0)
待つ();
this.signal–;
}
}
時限セマフォ:
時限セマフォにより、スレッドを設定された時間実行できます。 一定期間が経過すると、タイマーがリセットされ、他のすべての許可が解除されます。
時限セマフォの例:
クラスTimedSemaphoresExample
{{
プライベートTimedSemaphoreセマフォ;
TimedSemaphoreExample(long period、int slotLimit)
{{
semaphore = new TimedSemaphore(period、TimeUnit.SECONDS、slotLimit);
}
ブール値tryAdd()
{{
semaphore.tryAcquire();を返します。
}
int availableSlots()
{{
semaphore.getAvailablePermits();を返します。
}
}
制限付きセマフォ:
制限付きセマフォを使用して上限を設定できます。 セマフォには上限値がないため、セマフォをカウントする代わりに使用されます。 上限値は、保存できる信号の最大数を表します。
境界セマフォの例:
パブリッククラスBoundedSemaphoresExample
{{
private int signal = 0;
private int bound = 0;
public BoundedSemaphoreexample(int upperBound)
{{
this.bound = upperBound;
}
public void synchronized take()throws InterruptedException
{{
while(this.signals ==バウンド)
待つ();
this.signals ++;
this.notify ++;
}
public void synchronized release()throws InterruptedException
{{
while(this.signal == 0)
待つ();
this.signals–;
}
}
人気のソフトウェアエンジニアリングコースをご覧ください
SL。 いいえ | ソフトウェア開発プログラム | |
1 | LJMU&IIITBのコンピュータサイエンスの理学修士 | CaltechCTMEサイバーセキュリティ証明書プログラム |
2 | フルスタック開発ブートキャンプ | ブロックチェーンのPGプログラム |
3 | ソフトウェア開発のエグゼクティブ大学院プログラム-DevOpsの専門分野 | すべてのソフトウェアエンジニアリングコースを表示 |
特徴:
セマフォには次の特徴があります。
- これにより、スレッドは相互に通信できます。
- 同期の度合いが低下します。 その結果、低レベルの同期方法を提供します。
- セマフォに負の値はありません。 ゼロ以上の値をとることができます。
- テスト操作と割り込みを使用してセマフォを実装し、ファイル記述子を使用して実行できます。
セマフォの長所と短所:
利点:
- これにより、多くのスレッドが重要な部分に到達できるようになります。
- セマフォはマシンに依存しません。
- セマフォは、マイクロカーネルのマシンに依存しないコードで実装されます。
- 重要なセクションに複数のプロセスがアクセスすることは許可されていません。
- セマフォでは常にビジーウェイトが発生するため、プロセス時間やリソースの浪費はありません。
- これらはマシンに依存しないため、マイクロカーネルのマシンに依存しないコードで実行する必要があります。
- これらは、適応可能なリソース管理を可能にします。
短所:
- 優先順位の逆転は、セマフォの最も重要な制限の1つです。
- オペレーティングシステムは、すべての待機およびシグナルセマフォ呼び出しを追跡する必要があります。
- それらの使用は決して義務付けられていませんが、単に伝統によって義務付けられています。
- セマフォのデッドロックを回避するには、待機アクションとシグナルアクションを正しく実行する必要があります。
- セマフォプログラミングは複雑であるため、相互排除が達成されない可能性があります。
- また、モジュール性が失われるため、大規模なアプリケーションにとっては現実的な戦略ではありません。
- セマフォはプログラミングエラーの影響を受けやすくなります。
- プログラミングミスは、デッドロックまたは相互排除の違反につながる可能性があります。
セマフォをロックとして使用するにはどうすればよいですか?
セマフォは、Javaのロックとして使用できます。 これは、リソースへのアクセスを制限することを意味します。 ロックを取得するには、ロックされたリソースにアクセスするスレッドは、最初にacquire()関数を呼び出す必要があります。 作業が完了したら、スレッドはrelease()関数を呼び出してロックを解放する必要があります。 上限は1に設定する必要があることに注意してください。フルスタック開発のエグゼクティブPGコースは、これらすべてのスキルを習得するのに役立ちます。
概要
Javaのようなプログラミング言語について明確な考えを持つことは、ソフトウェア開発者としての輝かしいキャリアにとって不可欠です。 upGradは、有望なキャリアのための正しいキックを与えるかもしれないいくつかのコースを提供します。 upGradのPurudeUniversityによるフルスタック開発のスペシャライゼーションは、ソフトウェア開発の分野で繁栄するために必要なすべてのスキルを教えてくれます。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを迅速に追跡します。
Javaでセマフォが必要なのはなぜですか?
セマフォは、並行プロセスを管理するためのプロセス同期に使用される変数です。 また、複数の並行プロセスによる共有リソースへのアクセスを制御することにより、競合の問題を防ぎます。
なぜカウントセマフォが必要なのですか?
セマフォは、リソースアクセスを調整するためによく使用され、セマフォカウントは合計リソースのリストに設定されます。 リソースが与えられたり追加されたりすると、スレッドはアトミックにカウントを増やし、リソースが取り消されると、スレッドはアトミックにカウントを減らします。
セマフォが同期ツールとして知られているのはなぜですか?
セマフォは基本的に、多くのスレッドで共有される整数変数です。 この変数は、クリティカルセクションの問題を克服し、プロセスの同期を確立するために、マルチプロセッシング環境で使用されます。 これは、ミューテックスロックと呼ばれることもあります。
フルスタック開発とは何ですか?
フルスタック開発とは、Webアプリケーションのフロントエンド(クライアント側)コンポーネントとバックエンド(サーバー側)コンポーネントの両方を作成することです。 フルスタックのWeb開発者は、本格的なオンラインアプリケーションとWebサイトを作成できます。 彼らは、オンラインアプリケーションまたはWebサイトのフロントエンド、バックエンド、データベース、およびデバッグを担当します。