スレッド アンセーフとは:
スレッド セーフとは、マルチスレッドがアクセスするときにロック メカニズムが使用され、スレッドがこのクラスの特定のデータにアクセスするとき、そのデータは保護されることを意味します。このスレッドが読み取りを完了するまで、他のスレッドはアクセスできません。読み取りが完了すると、他のスレッドが使用できるようになります。データの不整合やデータ汚染は発生しません。スレッドのセキュリティが確保されていないとは、データ アクセスが保護されていないことを意味し、複数のスレッドが連続してデータを変更し、取得されたデータがダーティ データになる可能性があります。
ArrayList は、要素を追加するときに
1 という 2 つのステップで完了します。これを保存します。 Items[Size] の位置にある要素;
2. Size の値を増やします。 (推奨学習: Java ビデオ チュートリアル )
シングルスレッド操作の場合、Size = 0 の場合、要素を追加した後、要素は位置 0 になり、Size= になります。 1;
マルチスレッド状況の場合、たとえばスレッドが 2 つある場合、スレッド A は最初に要素を位置 0 に格納します。ただし、この時点では、CPU はスレッド A を一時停止するようにスケジュールし、スレッド B は実行する機会を得ます。この時点では Size がまだ 0 に等しいため、スレッド B もこの ArrayList に要素を追加します (要素の追加には 2 つのステップが必要であり、スレッド A はステップ 1 のみを完了していると想定していることに注意してください)。そのため、スレッド B は要素も Stored at に追加します。場所0。その後、スレッド A とスレッド B の両方が実行を継続し、どちらも Size の値を増加させます。
さて、ArrayList の状況を見てみましょう。実際には要素は 1 つだけあり、位置 0 に格納されていますが、Size は 2 に等しいです。これは「スレッドが安全ではありません」です。
サンプル プログラム:
package test; importjava.util.ArrayList; import java.util.List; public class ArrayListInThread implements Runnable{ List<string> list1 = new ArrayList<string>();// not thread safe publicvoid run() { try { Thread.sleep((int)(Math.random() * 2)); } catch (InterruptedException e) { e.printStackTrace(); } list1.add(Thread.currentThread().getName()); } public static void main(String[] args) throws InterruptedException { ThreadGroup group = new ThreadGroup("mygroup"); ArrayListInThread t = new ArrayListInThread(); for (int i = 0; i 0) { Thread.sleep(10); } System.out.println(); System.out.println(t.list1.size()); // it should be 10000 if thread safecollection is used. } }</string></string>
スレッドのセキュリティ不安を解決するには?
1 つ: synchronized キーワードを使用します。これは誰もがよく知っているはずなので説明しません;
2 つ: Collections.synchronizedList() を使用します; 使用方法は次のとおりです。次のように:
作成するコードが次のとおりであるとします。 List
次に、このスレッド セーフティの問題を解決するために、次のように Collections.synchronizedList() を使用できます:
List<map>> data=Collections.synchronizedList(newArrayList<map>>());</map></map>
他に何も変更はなく、使用されるメソッドは ArrayList とほぼ同じです。 API ドキュメントへ;
その他の Java 関連技術記事については、Java 開発チュートリアル 列にアクセスして学習してください。
以上がarraylist はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。

Javaのパフォーマンスはハードウェアアーキテクチャと密接に関連しており、この関係を理解することでプログラミング機能を大幅に改善できます。 1)JVMは、CPUアーキテクチャの影響を受けるJITコンピレーションを介して、Java Bytecodeを機械命令に変換します。 2)メモリ管理とゴミ収集は、RAMとメモリバスの速度の影響を受けます。 3)キャッシュとブランチ予測Javaコードの実行を最適化します。 4)マルチスレッドと並列処理がマルチコアシステムのパフォーマンスを改善します。

ネイティブライブラリを使用すると、これらのライブラリはオペレーティングシステムごとに個別にコンパイルする必要があるため、Javaのプラットフォームの独立性が破壊されます。 1)ネイティブライブラリはJNIを介してJavaと対話し、Javaが直接実装できない機能を提供します。 2)ネイティブライブラリを使用すると、プロジェクトの複雑さが増し、さまざまなプラットフォームのライブラリファイルの管理が必要です。 3)ネイティブライブラリはパフォーマンスを改善できますが、それらは注意して使用し、クロスプラットフォームテストを実施する必要があります。

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ホットトピック









