ほくそ笑む

R言語と統計解析について

Java で sleep sort (および Java のマルチスレッドの勉強のしかた)

sleep sort というソートアルゴリズムが話題になってますね。
常識を覆すソートアルゴリズム!その名も"sleep sort"!
最近 Java のマルチスレッドの勉強を始めたので、試しに Java で sleep sort を書いてみます。

final int[] array = { 5, 3, 6, 3, 6, 3, 1, 4, 7 };
for (int i = 0; i < array.length; i++) {
	final int index = i;
	new Thread() {
		public void run() {
			try {
				Thread.sleep(array[index] * 10);
				System.out.print(array[index] + ", ");
			} catch (InterruptedException e) {
			}
		};
	}.start();
}

実行結果:

1, 3, 3, 3, 4, 5, 6, 6, 7,

素人でもわりと簡単に書けました。
sleep() の中に *10 があるのは、僕の実行環境だと入れないとちゃんとソートされなかったからです><

Java のマルチスレッドの勉強のしかた

さて、僕が最近やってるマルチスレッドの勉強のしかたを紹介しておきます。
1.Java言語プログラムレッスン「第16章 スレッド」を読む。
非常に基本的なことが書いてあります。とりあえず最初はこれを読むのがいいでしょう。

改訂第2版 Java言語プログラミングレッスン (下)

改訂第2版 Java言語プログラミングレッスン (下)

2.コーディングの掟「第4章、第5章 マルチスレッドを理解しよう」を読む。
実用に踏み込んだ話をしてるのが面白いです。勉強のモチベーションになります。
コーディングの掟(最強作法) 現場でよく見る不可解なJavaコードを一掃せよ! (開発の現場セレクション)

コーディングの掟(最強作法) 現場でよく見る不可解なJavaコードを一掃せよ! (開発の現場セレクション)

3.Java言語で学ぶデザインパターン入門 マルチスレッド編 を読む。
今はこれを読んでます。分厚いですがさらさらと読めます。4.Java並行処理プログラミング を読む。
これが最終目標ですね。とりあえずこれを読んでおけばマルチスレッドは大丈夫でしょう。
Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

というわけで、これからも頑張っていこうと思います。
以上。