Javaのsynchronizedキーワードカテゴリには、知識ベースに属しているが、ソースコードのAndroidのフレームワーク層で、非常に一般的です。
それをマスター、それが前提Androidのソースコードを学習し、より良い読書です。
基本的な知識
1.役割
保証最大1つのスレッドで同時に変更方法/コードを同期実行します。
(すなわち、他のスレッドは、プロセス/スレッドが現在のコードブロックを実行した後方法/コードブロックを実行するために待たなければなりません)
2.シナリオ
セキュリティスレッドを確認します(実装は、閉塞によって複雑さ)によって複雑に、マルチスレッド同期問題解決、次のように特定のシナリオは次のとおりです。
- 方法/符号ブロック(SYNC)の変形例を用いて保護されている場合にオブジェクトメソッドは、オブジェクトの現在のインスタンスを呼び出し&
- 静的メソッド/コードブロック(SYNC)を変更する場合には、静的メソッド呼び出し&クラスのクラスオブジェクトを保護されています
3.文法
synchronized (obj){
.....
//此处的代码就是同步代码块
}
同期モニタの意味であるOBJ同期括弧内の上記構文後、上記のコードは次のとおり、前の同期ブロックを実行しているスレッドが開始は、第1のモニタの同期にロックを取得しなければなりません。
注:
(1)任意の時点で、唯一のスレッドのロックが同期モニタを得ることができるが、同期コードブロックの実行が終了すると、スレッドは、モニタの同期にロックを解除します。
(2)キーワード修飾法を同期化、コードブロックは、修正が、コンストラクタ、メンバ変数を変更しないことができます。
II。使用するルール
同期コードブロックは、これらと同期位置を使用することができる、方法およびJavaコードで使用することができる使用。
示されるように、同期に使用することができる方法で使用することができる上にブロックメソッドは静的メソッドであり、例示的な方法は、オブジェクトクラスとクラスの各オブジェクト・インスタンスをロックすることです。コードブロックに使用される三つのタイプに分類することができ、具体的には、上記の表に見ることができます。これは、ここで注意しなければならないです。スレッド間の同期関係を確保するために、あること、ロックがクラスオブジェクトの場合、オブジェクトの新しい複数のインスタンスにもかかわらず、そして、彼らはまだ同じクラスに属し、まだロックされます。
通常、共有リソースへの同時アクセスの同期化などの行為かもしれませんお勧めしますので、同一の共有リソースへの同時アクセスを防止するために、2つのスレッド:Javaでは、けれどもプログラムは、同期モニターとして任意のオブジェクトを使用しますが、モニターを同期させる目的を考えることができますモニター。
三つのパフォーマンスのヒント:
プログラムの変数効率のスレッドセーフなクラスは、営業費用を削減することである、スレッドセーフによって引き起こされる負の影響を軽減するために、プログラムは次のような戦略を取ることができます。
(1)は、スレッドセーフではいけないクラスをすべてのメソッドが同期しているため、メソッドのみが同期されます(つまり、リソースの競合がリソースを共有)競争力のリソースを変更します。
(2)可変動作環境の二つのカテゴリーがある場合:シングルスレッド環境とマルチスレッド環境は、それはすなわち、スレッドセーフバージョン、スレッドセーフなバージョンでは、単一スレッド環境でのスレッドを使用して、変数のカテゴリの2つのバージョンを提供しなければなりません。マルチスレッド環境でのパフォーマンス、スレッドセーフバージョンを確保するため、安全でないバージョン。
JDKは、StringBuilderのを提供し、StringBufferクラスは、シングルスレッド環境で提供シングルスレッドとマルチスレッド環境の世話をすることで、あなたはより良いパフォーマンスを確保するためのStringBuilderを使用する必要があります。あなたは、マルチスレッドの安全を確保する必要がある場合、あなたはStringBufferのを使用する必要があります。