西海岸より

つらつらざつざつと

Java

Google App Engine Java(Eclipse)の環境構築

今さらながらGoogle App EngineのJavaでの環境構築手順メモ。(MacOSX Lion) キーワード MacOSX Lion Slim3+Scenic3(GAP上で動作するフレームワーク)で動作 下準備 Google アカウントの準備。無い場合はgoogleのアカウントを作成 AppEngine上でアプリを登録 h…

ヒープを意図的に増加させる

ヒープサイズを意図的に圧迫するために作成した際に作ったjavaのメモ。 MemCracker.java import java.io.*; import java.util.*; public class MemCracker { public static void main(String[] args) throws Exception{ System.out.println("Start MemCracke…

正規表現のものぐさ(lazy, non-greedy)マッチング

忘れがちなのでメモ。 正規表現で?と言えば、一つ前の文字数が0回もしくは1回現れればマッチするもの。 だけど、*?、+?といったように書けば、最小となる文字列にマッチするようになり、ものぐさ、laze、non-greedyというそうな。 以下が例。removeTagメソッ…

Java並行処理プログラミングが復刊決定!

熱望していたJava並行処理プログラミング ―その「基盤」と「最新API」を究める―がついに復刊決定! メールで復刊活動を見守っていましたがついに稔ったのでしょう。(前回の記事)以下のURLで予約できます。 Java並行処理プログラミング その「基盤」と「…

Mapを正規表現でフィルターをかける

指定した正規表現に合致するkeyのみ残す関数。メモ。 MapUtil.java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MapUtil { public static <V> Map<String, V> filter(Map<String, V> map, String regex) { List<String></string></string,></string,></v>…

文字列から正規表現で特定部分を抽出

よくやるのでメモ。 引数の正規表現で、()でくくったところを抜き出す関数。 import java.util.regex.*; public class RegexUtil { public static String extractMatchString(String regex, String target) { Pattern pattern = Pattern.compile(regex); Mat…

nioライブラリを使ったechoサーバ

nioライブラリを勉強中で、手始めにechoサーバを作ってみた。 NioEchoServer.java package echoserver; import java.io.*; import java.net.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; import java.text.*; import java…

javaプロセスの使用メモリの合計値を出力

macでjps、jmapコマンドを使用しようとシェルを作ったのでメモ。javaでは標準でjmapというコマンドがあり、メモリリークが発生しているかを調べるのに役立つ。起動中のjavaプロセスを指定することで、そのプロセス内でどのようなオブジェクトへの参照、また…

メソッドのone-liner変換

Eclipseで自動生成してくれるようなメソッド(委譲したものなど)はたまにone-line化(1行に変換)してほしいことがあるので、javascriptを書いてみた。 JavaOneLineEncoder 画面 使い方 onelineにメソッドを貼ってボタンを押すだけ。ちょっとした時に使える程度…

ジェネリクスを使ったインタフェースの実装方法

"Java並行処理プログラミング"の第八章で、Puzzleインタフェースを実装しようとしたけど、どう実装していいのかわからなかった顛末のメモ。結局著者Brian Goetzにまでメールして解決しました。実装しようとしてたのは以下のPuzzleインタフェース。Listing 8.…

Java並行処理プログラミングの復刊活動が進んでいる

先日、復刊ドットコムに『Java並行処理プログラミング』復刊リクエストを投票して以来、復刊の報告を待ちわびているのだけれど、ようやく最近になって復刊打診活動の進捗メールが飛んで来てます。投票数も200票超えてますし相当な需要があるかと。ただ欲を言…

デッドロックの検出を試す

デッドロックが発生した場合にどうしたら良いのか、実際に意図的にデッドロックが発生するコードを作り、スレッドダンプを見て試してみた。(MacOSX 10.5.7, java1.6.0_07) デッドロックが発生するコード DeadLocker.java public class DeadLocker{ public st…

this参照の逸脱

並行処理プログラミングのP48、安全なオブジェクトの公開について。 スレッドセーフではない。 public class UnsafePublisher{ private final String id; public UnsafePublisher(String id){ Runnable task = new Runnable(){ public void run(){ System.ou…

Atomicな変数の利用

昨日の続き。シンプルに複数スレッドでvalueというカウンターをインクリメントしていくコード スレッドセーフでは無いコード public final class Counter { private long value = 0; static final int threadNum = 1000; static final int loopNum = 1000; p…

複数スレッドからアクセスされる変数の同期化

先日から、噂の良書「Java並行処理プログラミング」をお借りしてマルチスレッドを勉強中。以下のコードはスレッドセーフではないけど、それはどこか? UnThreadSafe.java public class UnThreadSafe{ private static boolean loopFlag = true; private stati…

Interruptされるタイミング

細かいところだけれど、interrupt状態でsleepに入るとInterruptedExceptionが即座にスローされる。 InterruptedThread.java public class InterruptedThread{ public static void main(String[] args){ Thread.currentThread().interrupt(); try{ Thread.sle…

スレッド終了のお作法

マルチスレッドのプログラムはまともに書いたことが無く、迷ったのが実行し続けるスレッドの終了方法。 LoopThreadTest.java(最初の実装) public class LoopThreadTest{ public static void main(String[] args){ System.out.println("LoopThreadTest: start…

Head First デザインパターン

ここ二週間ぐらい、じっくりこの本を読んでデザインパターンをお勉強。 amazonのレビューにもある通り、この本は頭と感覚で理解させるようなスタイルで 結構読みやすく、読者に適度に問いかけ、考えさせる本が学べ、 すんなりと頭の中に入ってくる感じがした…