Java のさまざまなコレクションのスレッド セーフについての深い理解
スレッドの安全性
まず第一に、スレッドの動作原理を理解する必要があります。メモリ、および各スレッドには独自の working
memory があります。スレッドが変数を操作するときは、独自の working
memory にコピーを作成し、それを main# に書き込む必要があります。
操作完了後。##メモリ。複数のスレッドが同じ変数を同時に操作すると、予期しない結果が発生する可能性があります。上記の説明に基づいて、対応するシナリオを思いつくのは簡単です。 synchronized を使用するための鍵は、モニターを作成することです。このモニターには、変更する変数や、メソッドなどの適切だと思われるその他のオブジェクトを指定し、モニターをロックしてスレッド セーフを実現します。各スレッドこのロックを取得した後、取得したロックが解放される前に、作業メモリへのロード→使用&割り当て→メインメモリへのストアという処理が実行されます。これにより、いわゆるスレッドセーフが実現されます。 スレッド セーフとは何ですか? スレッド セーフはどのように達成されるのですか (原理)? スレッド セーフとは、不確実な結果を生成することなく、複数のスレッドが同じコードにアクセスすることを意味します。スレッドセーフなコードを作成すると、スレッドの同期が低下します。 【推奨学習:Java ビデオ チュートリアル 】
Java 関連コレクション
Vector、ArrayList、LinkedList
Vector と ArrayList は使用方法が非常に似ており、可変数のオブジェクト アプリケーションのセットを表すために使用でき、要素にランダムにアクセスできます。 Vector のメソッドはすべて同期 (Synchronized) されており、スレッド セーフですが、ArrayList のメソッドはそうではありません。スレッドの同期は必然的にパフォーマンスに影響を与えるため、ArrayList のパフォーマンスは Vector のメソッドよりも優れています。ArrayList と LinkedList の違い
データ項目の列を処理するために、Java は ArrayList と LinkedList という 2 つのクラスを提供します。ArrayList の内部実装は、内部配列 Object[]. したがって、概念的には配列に似ていますが、LinkedList の内部実装は接続されたレコードのセットに基づいているため、リンク リスト構造に似ており、パフォーマンスに大きな違いがあります。 上記の分析から、ArrayList の前または途中にデータを挿入する場合は、それに応じてすべてのデータをその後ろに移動する必要があり、必然的に時間がかかることがわかります。データ列の前や中央ではなく後にデータを追加し、要素にランダムにアクセスする必要がある場合、ArrayList を使用するとパフォーマンスが向上します。また、リンクされたリスト内の要素にアクセスする場合は、次の操作を開始する必要があります。リンクされたリストの一方の端から、必要な要素が見つかるまで接続方向に沿って要素ごとに検索します。したがって、データ列の前または途中でデータを追加または削除し、要素にアクセスする操作を行う場合は、どのような場合に、LinkedList を使用する必要があります。 プログラミング中に 1 と 2 の 2 つの状況が交互に現れる場合は、特定の実装を気にせずに List のような汎用インターフェイスを使用することを検討できます。特定の状況では、そのパフォーマンスは特定の実装によって決まります。HashTable、HashMap、HashSet
HashTable と HashMap は同じストレージ メカニズムを使用しており、その実装は基本的に同じです。違いは次のとおりです: 1 )、HashMap はスレッドセーフではなく、HashTable はスレッドセーフであり、内部メソッドは基本的に同期されます。 2)、HashTable では null 値は許可されません。 HashTable で put メソッドを呼び出すとき、キーが null の場合、NullPointerException が直接スローされます。他にも、初期化された Entry 配列のサイズなど、微妙な違いがありますが、基本的な考え方は HashMap と同じです。HashSet:
1. HashSet は HashMap に基づいて実装されており、容量制限はありません。 2. HashSet はスレッドセーフではありません。 3. HashSet は順序を保証しません。HashMap:
1. HashMap は配列を使用して、キーと値で構成される Entry オブジェクトを容量制限なしで保存します。 2. HashMap は、キー ハッシュに基づいて配列内で Entry オブジェクトが格納されている場所を検索し、リンク リストを使用してハッシュの競合を解決します。 3. HashMap は要素を挿入するときに配列の容量を拡張する必要がある場合があります。容量を拡張する場合は、ハッシュを再計算し、オブジェクトを新しい配列にコピーする必要があります。 4. HashMap はスレッドセーフではありません。 5. HashMap トラバーサルは Iterator を使用しますHashTable
1. HashTable はスレッドセーフです。 2. HashTable の Key も Value も null にすることはできません。 3. HashTable のトラバーサルでは列挙を使用します。 TreeSet,TreeMapTreeSet:
1. TreeSet は TreeMap に基づいて実装され、並べ替えをサポートします。 2. TreeSet はスレッドセーフではありません。HashSet と TreeSet の説明から判断すると、TreeSet も HashSet と同様に完全に Map に基づいており、どちらも指定位置の要素を取得する get(int) をサポートしていません (取得するにはトラバースする必要があります)。いくつかの並べ替えサポートも追加されました。たとえば、Comparator 実装、decendingSet、decendingIterator などを渡します。
TreeMap:
1. TreeMap は赤黒ツリーに基づく典型的な Map 実装であるため、Key 比較メソッド、または Comparator 実装を渡す必要があります。または、キー オブジェクトが Comparable インターフェイスを実装します。
2. TreeMap はスレッドセーフではありません。
概要
上記は、さまざまな Java コレクションのスレッド セーフについて詳しく説明したこの記事の全内容です。
この記事は Java 入門 列からのものです。ぜひ学習してください。
以上がJava のさまざまなコレクションのスレッド セーフについての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。
