スレッドセーフティ
Java言語におけるスレッドセーフティ
1 不変。不変オブジェクトはスレッドセーフである必要があります
2. 実行時環境に関係なく、クラスが完全にスレッドセーフであるためには、通常、呼び出し元は追加の同期手段を必要としません。 Java API クラスは自らをスレッドセーフとしてマークしていますが、そのほとんどは完全にスレッドセーフではありません
3 相対的なスレッドセーフ
4 スレッド互換性 オブジェクト自体はスレッドセーフではありませんが、同期を正しく使用することで保証できます同時実行環境で安全に使用できることを意味します
5 スレッド反対
スレッドセーフの実装方法
1 相互排他と同期
共通の同時実行性の正確性を保証する携帯電話、同期とは、複数のスレッドが同時に実行される場合を指します。共有データにアクセスする ストレージ証明書の共有データは、同時に 1 つのスレッドによってのみ使用されます
最も基本的な相互排他方式は、synchronized キーワードです。
java.util.concurrent パッケージのロックを使用して同期を実現することもできます ReentrantLock、
JDK1.6 では同期が最適化されており、効率は基本的に ReentrantLock と同じです。
2 ノンブロッキング同期
競合検出に基づく楽観的な同時実行戦略
CAS操作の比較交換
3 非同期ソリューション
ロックの最適化
1. スピンロックと適応スピン
2. ロックの排除
3.ロックコースニング
4.レベルロック
5.バイアスロック