2013-03-01から1ヶ月間の記事一覧

スレッドセーフではないコード(4回目)

今回はsynchronizedメソッドの話。「synchronizedが付いているメソッドは同時に実行されない」と思っていたら大まちがい。下記に4種類のコード例のうち、System.out.println()が排他的に実行されるのは2つだけ。 System.outする箇所にブレークポイントを設定…

スレッドセーフではないコード(2回目)

前回(1回目)はサーブレットを例にスレッドセーフではないコードを考えてみたが、スレッドセーフではないことを目に見えるかたちで実証するのが難しかった。 今回はJava SEの環境で動かせるクラスでスレッドセーフではないことを実証してみる。まずは、カウン…

スレッドセーフではないコード(3回目)

他人が書いたコードがマルチスレッド下で正しく動くかどうか検証するのは骨の折れる作業と実感する。テスト時になるべくバグが出やすくするコツとしてClient VMではなくServer VMで動かすとよいそうだ。ServerVMの方がClientVMにくらべてより最適化しようと…

スレッドセーフではないコード(1回目)

書いてはいけないコードの例。アクセスカウント(requestCount)を表示するサーブレットを考える。サーブレット自体はシングルトンなので、ブラウザからアクセスするとrequestCountの値がインクリメントされ、正しく動くかのように見える。しかし、++のインク…