The King's Museum

ソフトウェアエンジニアのブログ。

2016-08-01から1ヶ月間の記事一覧

【Effective Java】項目67:過剰な同期は避ける

前回の記事では、同期が不十分な場合にはマルチスレッド環境において予期しないエラーが発生する可能性を説明しました。 hjm333.hatenablog.com hjm333.hatenablog.com 今回は前回とは逆の視点です。 過剰に同期することによって発生する問題について取り上…

Java の同期化とは何か(2)(【EffectiveJava】項目66:共有された可変データへのアクセスを同期する-後半-)

前回の記事では Java の同期化(synchronized)について説明してきました。 hjm333.hatenablog.com 今回の記事では「volatile」と「同期化が必要ない場合」について説明します。 volatile Java の同期化(synchronized)は次の性質を保証するものでした。 ア…

Java の同期化とは何か(1)(【EffectiveJava】項目66:共有された可変データへのアクセスを同期する-前半-)

複数のスレッドで可変データを共有する場合にはそれぞれのスレッドを同期化(synchronized)する必要があります。 Java の同期化は次の二つの性質を保証します。 アトミック性(処理の排他制御) メモリの可視性 アトミック性 異なるスレッドが共通のデータ…

【Effective Java】項目65:例外を無視しない

空の catch ブロックを使って例外を無視してはいけません。 // 空の catch ブロック try { ... } catch (Exception e) { } 例外を無視するとエラーがあるという事実が隠蔽されてしまいます。 それによって、他の場所で別の形でエラーが再現する可能性もあり…

【Effective Java】項目64:エラーアトミック性につとめる

オブジェクトのメソッドが例外をスローしたあとは、そのメソッドを呼び出す前の状態になっているべきです。 この性質を「エラーアトミックである」といいます。 「エラーアトミック」を達成する方法はいくつかあります。 不変オブジェクト エラーアトミック…

【Effective Java】項目63:詳細メッセージにエラー記録情報を含める

システムがキャッチされない例外で終了すると次の情報が出力されます。 スタックトレース 例外の文字列表現 例外の詳細メッセージ 最後の「例外の詳細メッセージ」はエラーの原因を調査するための唯一の手がかりであることが多いです。 そのため、例外の詳細…

Productivity Hack 2

朝一に1日のタスクリストを作るのではなく、お昼にその日の午後と次の日の午前のタスクリストを作ることで Productivity を改善しましたよ、というお話。 (僕が今使ってる Productivity 系の話は次の記事からどうぞ。) hjm333.hatenablog.com 詳細 『エン…

【Effective Java】項目62:各メソッドがスローするすべての例外を文書化する

チェックされる例外は個別に宣言するべきです。 そして、それぞれの例外の発生条件を Javadoc の @throws に必ず文書化するべきです。 throws Exception や throws Throwable というように、複数の例外をまとめて throws 宣言してはいけません。 扱うべき例…

【Effective Java】項目61:抽象概念に適した例外をスローする

例外翻訳 メソッドの内部で発生した下位レイヤの例外は、外側に伝播させないほうがいい場合があります。 下位レイヤで発生した例外をそのままスローすると、利用者が混乱したり API を実装の詳細で汚染する場合があります。 そのレイヤの概念と合わない例外…

【Effective Java】項目60:標準例外を使用する

Java ではほとんどの場面で必要となる基本的な例外が標準ライブラリに含まれています。 すでに用意されている標準の例外を再利用することには次のような利点があります。 コードを確立されている慣例と一致させることができる 見慣れた例外によってコードの…

(c) The King's Museum