国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる Java ロックの違いは何ですか?

Java ロックの違いは何ですか?

Nov 12, 2019 pm 04:31 PM
java 違い ロック

Java ロックの違いは何ですか?

公平なロック/不公平なロック

公平なロックとは、複數(shù)のスレッドがその順序でロックを取得することを意味します。ロックを申請(qǐng)してください。

不公平なロックとは、複數(shù)のスレッドがロックを取得する順序が、ロックを適用する順序ではないことを意味します。最初に適用するスレッドよりも後から適用するスレッドが先にロックを取得する可能性があります。優(yōu)先順位の逆転や飢餓が発生する可能性があります。

Java ReentrantLock の場(chǎng)合、コンストラクターを通じてロックが公正なロックであるかどうかを指定します。デフォルトは不公平なロックです。不公平なロックの利點(diǎn)は、スループットが公平なロックよりも高いことです。

Synchronized の場(chǎng)合、これも不當(dāng)なロックです。 ReentrantLock のような AQS を介したスレッド スケジューリングを?qū)g裝していないため、公平なロックに変える方法はありません。

リエントラント ロック

リエントラント ロックは再帰的ロックとも呼ばれ、同じスレッドが外側(cè)のメソッドでロックを取得すると、內(nèi)側(cè)のメソッドに入るという意味です。自動(dòng)的に取得されます。少し抽象的ですが、以下にコード例を示します。

Java ReentrantLock の場(chǎng)合、その名前はリエントラント ロックとして認(rèn)識(shí)され、Reentrant Lock となります。

同期の場(chǎng)合、これは再入可能なロックでもあります。リエントラント ロックの利點(diǎn)の 1 つは、デッドロックをある程度回避できることです。

synchronized void setA() throws Exception{
    Thread.sleep(1000);
    setB();
}
synchronized void setB() throws Exception{
    Thread.sleep(1000);
}

上記のコードはリエントラント ロックの機(jī)能です。リエントラント ロックでない場(chǎng)合、現(xiàn)在のスレッドで setB が実行されず、デッドロックが発生する可能性があります。

排他ロック/共有ロック

排他ロックとは、一度に 1 つのスレッドのみがロックを保持できることを意味します。

共有ロックは、ロックを複數(shù)のスレッドで保持できることを意味します。

Java ReentrantLock の場(chǎng)合、これは排他的ロックです。ただし、Lock の別の実裝クラスである ReadWriteLock の場(chǎng)合、その読み取りロックは共有ロックであり、その書(shū)き込みロックは排他ロックです。

読み取りロックの共有ロックにより、同時(shí)読み取りが非常に効率的に行われ、読み取り、書(shū)き込み、書(shū)き込み、書(shū)き込みのプロセスが相互に排他的になります。

排他的ロックと共有ロックも AQS を通じて実裝されます。排他的ロックまたは共有ロックは、さまざまな方法で実裝されます。

Synchronized の場(chǎng)合は、もちろん排他ロックです。

相互排他ロック/読み取り/書(shū)き込みロック

上記の排他ロック/共有ロックは広義の用語(yǔ)であり、ミューテックス ロック/読み取り/書(shū)き込みロックは特定のものです。実現(xiàn)。

Java におけるミューテックス ロックの具體的な実裝は、ReentrantLock です。

Java における読み取り/書(shū)き込みロックの具體的な実裝は ReadWriteLock です。

オプティミスティック ロック/ペシミスティック ロック

オプティミスティック ロックとペシミスティック ロックは、特定の種類のロックを指すのではなく、同時(shí)実行性と同期の観點(diǎn)を指します。

悲観的ロックでは、同じデータに対する同時(shí)操作は必ず変更されると考えられ、変更がなくても変更されたものとみなされます。したがって、同じデータに対する同時(shí)操作の場(chǎng)合、悲観的ロックはロックの形式になります。悲観的に言えば、ロックを行わない同時(shí)操作は間違いなく問(wèn)題を引き起こすと思います。

オプティミスティック ロックでは、同じデータに対する同時(shí)操作は変更されないと考えられます。データを更新する場(chǎng)合、更新を試行し、常にデータを再更新することでデータが更新されます。楽観的に考えれば、ロックを行わなくても同時(shí)操作に問(wèn)題はありません。

上記の説明から、悲観的ロックは書(shū)き込み操作が多いシナリオに適しており、楽観的ロックは読み取り操作が多いシナリオに適していることがわかります。ロックしないとパフォーマンスが大幅に向上します。 。

Java での悲観的ロックの使用は、さまざまなロックを使用することです。

Java におけるオプティミスティック ロックの使用は、ロックフリー プログラミングであり、CAS アルゴリズムがよく使用されます (代表的な例として、CAS スピンによるアトミック操作の更新を?qū)g裝するアトミック クラス)。

セグメント ロック

セグメント ロックは実際にはロックの設(shè)計(jì)であり、特定のロックではありません。ConcurrentHashMap の場(chǎng)合、その同時(shí)実行実裝はセグメント ロックを通じて効率的な同時(shí)操作が実現(xiàn)されます。

ConcurrentHashMap を例に、セグメント ロックの意味と設(shè)計(jì)思想について話しましょう。ConcurrentHashMap のセグメント ロックはセグメントと呼ばれ、HashMap (JDK7 および JDK8 の HashMap の実裝) の構(gòu)造に似ています。內(nèi)部には Entry 配列があり、配列內(nèi)の各要素はリンク リストであり、ReentrantLock でもあります (セグメントは ReentrantLock を継承します)。

要素を配置する必要がある場(chǎng)合、ハッシュマップ全體をロックするのではなく、最初にハッシュコードを使用して要素を配置する必要があるセグメントを認(rèn)識(shí)し、次にこのセグメントをロックします。つまり、セグメント內(nèi)に配置されない限り、真の並列挿入が実現(xiàn)されます。

ただし、サイズをカウントする場(chǎng)合、ハッシュマップのグローバル情報(bào)を取得する場(chǎng)合、カウントするにはすべてのセグメントのロックを取得する必要があります。

セグメント化されたロックの設(shè)計(jì)目的は、ロックの粒度を調(diào)整することです。操作で配列全體を更新する必要がない場(chǎng)合、配列內(nèi)の 1 つの項(xiàng)目だけがロックされます。

バイアス ロック/軽量ロック/重量ロック

これら 3 種類のロックはロックのステータスを指し、同期用です。 Java 5 では、ロック アップグレード メカニズムを?qū)毪工毪长趣摔瑜辍柯实膜释冥瑢g現(xiàn)されます。これら 3 つのロックのステータスは、オブジェクト モニターのオブジェクト ヘッダー內(nèi)のフィールドによって示されます。

バイアスされたロックとは、同期コードの一部が常に 1 つのスレッドによってアクセスされ、そのスレッドが自動(dòng)的にロックを取得することを意味します。ロックを取得するコストを削減します。

軽量ロックとは、ロックがバイアスされたロックであり、別のスレッドによってアクセスされると、バイアスされたロックが軽量ロックにアップグレードされることを意味します。他のスレッドはブロックせずにスピンを通じてロックを取得しようとし、パフォーマンスが向上します。

ヘビーウェイト ロックとは、ロックが軽量ロックの場(chǎng)合、別のスレッドが回転しているにもかかわらず、永遠(yuǎn)にスピンが継続するわけではなく、一定回?cái)?shù)スピンした時(shí)點(diǎn)ではまだ取得されていないことを意味します。はブロッキングに入り、ロックは重量ロックに拡張されます。重いロックは他のアプリケーション スレッドをブロックし、パフォーマンスを低下させます。

スピン ロック

Java では、スピン ロックは、ロックを取得しようとするスレッドがすぐにはブロックされず、ループを使用してロックを取得しようとすることを意味します。この利點(diǎn)は、スレッド コンテキストの切り替えの消費(fèi)を削減できることですが、欠點(diǎn)は、ループが CPU を消費(fèi)することです。

php 中國(guó)語(yǔ) Web サイト、無(wú)料の Java 入門(mén)チュートリアル が多數(shù)あり、オンラインで學(xué)習(xí)することを歓迎します。

以上がJava ロックの違いは何ですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動(dòng)コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開(kāi)始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場(chǎng)合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場(chǎng)合はconn.rollback()を呼び出します。同時(shí)に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお?jiǎng)幛幛筏蓼埂?/p>

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機(jī)能しますか? Garbage CollectionはJavaでどのように機(jī)能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動(dòng)的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採(cǎi)用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時(shí)間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號(hào)、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるU(xiǎn)RL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

HTTPミドルウェアロギングの例を例に進(jìn)めます HTTPミドルウェアロギングの例を例に進(jìn)めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時(shí)間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開(kāi)始時(shí)間と終了時(shí)間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開(kāi)始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Javaでオブザーバーパターンを使用する方法は? Javaでオブザーバーパターンを使用する方法は? Aug 02, 2025 am 11:52 AM

この質(zhì)問(wèn)に対する明確な答えは、カスタムオブザーバーインターフェイスを使用してオブザーバーパターンを?qū)g裝するための推奨事項(xiàng)です。 1. Javaは観察可能なオブザーバーを提供していますが、前者はクラスであり、廃止されており、柔軟性がありません。 2。最新の推奨される実踐は、機(jī)能的なオブザーバーインターフェイスを定義することであり、被験者はオブザーバーリストを維持し、狀態(tài)が変更されたときにすべてのオブザーバーに通知することです。 3.ラムダ式と組み合わせて使用して、コードのシンプルさと保守性を向上させることができます。 4。GUIまたはJavabeanシナリオの場(chǎng)合、PropertyChangelistenerを使用できます。したがって、新しいプロジェクトはカスタムオブザーバーインターフェイススキームを採(cǎi)用する必要があります。カスタムオブザーバーインターフェイススキームは、タイプセーフでテストしやすく、現(xiàn)代のJavaを?qū)熼T(mén)としています

Java Concurrencyユーティリティ:ExecutorServiceおよびFork/Join Java Concurrencyユーティリティ:ExecutorServiceおよびFork/Join Aug 03, 2025 am 01:54 AM

ExecutorServiceは、I/O操作やタイミングタスクなどの獨(dú)立したタスクの非同期実行に適しています。スレッドプールを使用して並行性を管理し、送信を通じて実行可能または呼び出し可能なタスクを送信し、將來(lái)の結(jié)果を取得します。固定されていないキューのリスクに注意を払い、スレッドプールを明示的に閉じます。 2.フォーク/Joinフレームワークは、分割と論爭(zhēng)の方法とワークスチールアルゴリズムに基づいた分割および政府CPU集約型タスク用に設(shè)計(jì)されており、フォークジョインプールによってスケジュールおよび実行された再帰イベタスクまたは再送信によるタスクの再帰的分割を?qū)g現(xiàn)します。大規(guī)模な配列の合計(jì)と並べ替えシナリオに適しています。分割のしきい値は、オーバーヘッドを避けるために合理的に設(shè)定する必要があります。 3。選択基準(zhǔn):獨(dú)立

See all articles