三つの特徴をスレッドとしてだけでなく、揮発性、ThreadLocalの

三つの特徴をスレッド

マルチスレッドには3つのプロパティ、アトミック性、可視性、秩序を持っています。

アトミック:すなわち単一操作または単一のグループまたはすべての実行(任意因子の実行中に中断されない)、または実行しないものです。

可視性:、複数のスレッドが同じ変数にアクセスしたとき、あるスレッドがこの変数の値を変更し、他のスレッドが直ちに変更された値を見ることができます。

注文:オーダーコードで実行されるプログラムの実行シーケンス。

タイムリーな他のスレッドによって発見マルチスレッドデータ原子の一貫性を確保するために簡単に、共有変数の変化の視認性を確保するため、スレッドセーフの一部であり、プロセッサは、一般的な手順を改善するために順序を指し効率を操作し、コードの最適化を入力するかもしれないが、それはコードの順序と一致ために、個々のステートメントでのプログラムの実施を保証するものではありませんが、それは最終結果とコードシーケンスの実行プログラムの実行結果は同じであることを保証します。

並べ替えとシングルスレッド、マルチスレッドには影響を与えませんが、例に検討します。

揮発性

揮発性キーの役割は、揮発性、変数が複数のスレッド間でそれが見えるように修正し、視認性を確保することであるが、揮発性の原子性を持っていません。

簡単に言えば、揮発性のキーワードを使用すると、可視性の問題を解決することができ、スレッド間で変数を共有し、各スレッドは、それらが「メインメモリ」の値にあるときに値を読み取ることを余儀なくされます。

揮発性と同期の違いは?

  • 唯一の揮発性変数修飾、同期コードブロックは、前者は、軽量であり、/機能/変数を修正することができます。
  • 揮発ことができる唯一の保証可視性揮発性変数にマルチスレッドの同時アクセスが変更され、ブロックされませんので、原子性を持っていない、セキュリティスレッドの同期を保証するために使用することはできません。
  • 複数のスレッドが唯一のスレッドがロックを取得し、実行し、実行時にオブジェクトコードを実行するためにロックを取得のみ視認不可分に同期synchronizedキーワードは、、、が阻止されます。

概要:簡単に言えスレッドセーフでは、「可視性」と「原子」の問題以外の何物でもありません。並行プログラミングでは(カテゴリJUCパッケージの下)を使用して、クラス原子及び+同期または揮発性ロックまたはスレッド・セーフの実現は、実際の需要に応じて可能な実施形態です。

ThreadLocalの

保守スレッドがThreadLocalの変数を使用する場合、独立変数は、文字通り「ネイティブスレッド」のThreadLocalのコピーを提供THREADLOCAL、各スレッドが独立して変更できるように、変数を使用するスレッドごとにローカルThreadLocal変数のスレッドとして使用され、そのコピーを対応する他のスレッドに影響を与えずに、コピーします。

ThreadLocalのクラスインターフェイスは、唯一の4つの方法は非常に簡単です:

  • 値voidセット(Object値)は、現在のスレッドのスレッドローカル変数を設定します。
  • パブリックオブジェクトのget()はスレッドローカル変数に対応する現在のスレッドを返します。
  • 公共のボイドのremove()現在のスレッドのローカル変数の値は、JDK 5.0のための新しい方法でメモリ使用量を、削減の目標を削除します。とても明示的にローカル変数が動作するために必要とされていないが、それはメモリ速度の回復をスピードアップすることができますスレッドをクリアするには、このメソッドを呼び出して、スレッドの終了、スレッドローカル変数は自動的にゴミであるべきとき、ことに留意すべきです。
  • 明らかに可能にするために、保護されたサブクラスに設計カバーの方法であって、スレッドローカル変数の初期値、に保護されたオブジェクトはinitialValue()リターンします。この方法では、遅延呼び出しに、コールget()メソッドであるかのセット(オブジェクト)とき実行スレッドは初めて、と一度だけ実行します。直接リターンのデフォルトのThreadLocalはnull。

ThreadLocalの実装原理が実際にマップコレクションによって実現されている、あなたはより多くのあなたがソースコードを表示することができます知ってほしいです。

公開された13元の記事 ウォン称賛32 ビュー10000 +

おすすめ

転載: blog.csdn.net/QingHe97/article/details/103810616