=
ホーム
On Your Mark
ホーム
/
設計(Java)
/
【Java】 Effective Java 第二版 お勉強 遅延初期化
2014年1月13日月曜日
Java
基本
設計(Java)
t
f
B!
P
L
# 並行性 ## 今日 読んだところ P 272~275 ## 項目 遅延初期化を注意して使用する<br /> ## 遅延初期化とは 初期化を遅らせること。<br /> インスタンスの一部のみ使用され、初期化のコストが多大な場合に有効だが、<br /> それに当てはまらない場合は、クラスの初期化やインスタンスの生成のコストが低下する。<br /> そのため必要なければ利用しないほうが良い。<br /> ## 普通の初期化 <pre> private final FieldType field = computeFieldValue(); </pre> ## 同期化されたメソッドで遅延初期化 <pre> private final FieldType field; synchronized FieldType getField() { if (field == null) { field = computeFieldValue(); } return field; } </pre> ## 二重チェック パフォーマンスのために遅延初期化を行う場合に使用。<br /> フィールドが初期化された後にアクセスされた場合のロックのコストを回避するため、<br /> 複雑だがパフォーマンスは上がる<br /> <pre> FieldType getField() { FieldType result = field; if (result == null) { // ここで同期 synchronized (this) { result = field; if (result == null) { // 初期化 field = result = computeFieldValue(); } } } return result; } </pre> ## 単一チェック 複数回の初期化が許される場合のみ有効。<br /> 2重チェックの2回目のチェックを省略する。<br /> <pre> FieldType getField() { FieldType result = field; if (result == null) { // 初期化、何回か実行される可能性はある field = result = computeFieldValue(); } return result; } </pre>
Translate
このブログを検索
ブログアーカイブ
►
2020
(38)
6月 2020
(6)
5月 2020
(10)
4月 2020
(10)
3月 2020
(4)
2月 2020
(5)
1月 2020
(3)
►
2019
(4)
1月 2019
(4)
►
2018
(23)
12月 2018
(3)
4月 2018
(11)
3月 2018
(9)
▼
2014
(20)
7月 2014
(3)
1月 2014
(17)
►
2013
(166)
12月 2013
(15)
11月 2013
(22)
10月 2013
(31)
9月 2013
(26)
8月 2013
(32)
7月 2013
(40)
今週の人気の記事
【まとめ】GWはおうちでぬりえ 鉄道会社公式の電車ぬりえをまとめた
【MySQL】文字列をバイト数で切り取る
【まとめ】おうちでペーパークラフト 鉄道会社公式のペーパークラフトをまとめた
【Trac】 Trac Lightning と Git を連携させる
【PHP】PHPでSFTP接続
フォロワー
On Your Mark
QooQ
0 件のコメント:
コメントを投稿