Javaで並行処理を書く

最近はPHPやGo、JavaScriptばっかりやっていて、ほとんどJavaを触らなくなっていました。
Java9もリリースされたことですし、ここらで少し触っておこうと思います。

今回やってみるのは並行処理です。
以前、仕事で「Javaでバッチ処理」を実装した際、「メインスレッドと別スレッドでバッチを実行させる」という対応をしました。
いわゆる並行処理です。

並行処理とは

1つのCPU上で複数の処理を行うこと(この場合、実行順は保証されない)

並列処理とは

複数のCPUで1つの処理を行うこと(時間のかかる処理を分散させる)

ちなみに、JavaScriptでPromiseやコールバックを使って処理するケースは前者です。
並列処理は計算・演算面で使われるケースが多い印象です。
今回Javaで実装したのは並行処理です。
ExecutorServiceFutureを使います。

  • コード

  • 結果

一番処理に時間がかかっているタスク(8件目)とほぼ同じ時間でメイン処理が終了したことがわかります。
また、出力内容からスレッドが使いまわされていることもわかります。

いかがでしたでしょうか。
意外と簡単に実装できたことと、このjava.util.concurrentパッケージはJavaSE6からあったことが衝撃でした。
ちなみに、GoならGoroutineという機能があるので、もっと簡単に実装できます。
※ただし、プロセスやスレッドとは厳密には異なるため、アプローチや考え方が少し変わります。

余談として、内容的に大したプログラムではありませんが、メソッド宣言でfunctionと書きそうになったり、変数宣言でvalとか書いてしまい、コンパイラに怒られっぱなしでした。

自分のやったことに満足していては進歩しない。常により良き方法を考えるのが成長への第一歩である by俺 その1

2回連続で更新します。
今回はプログラミングの話なので、興味がある方は読んでみてください。

Java7が出て結構経ちました。
にも関わらず、私はずっとJava6の機能でプログラミングをしていました。
今の客先に行くようになって、Java7の新機能について調べる機会があったのですが、かなり衝撃を受けました。
今更ではありますが、印象に残った機能をメモしておきます。

1.ダイヤモンド演算子
個人的には一番びっくりしました。
ようは、newする際にジェネリクスの型を省略できるよってことです。
今までは、

って書かなければならなかったところが、

と書けます(MapやIteratorやModelも同様)。
ただ、匿名クラスなどでインスタンス化する場合は省略できないようです。
例えば以下の場合は、型指定は必須です。

2.switchで文字列判定
switch分のcaseで文字列判定ができるようになりました。
今まではEnumやIntegerでしか判定できなかったものが、単純に以下のように書けます。

3.例外のマルチキャッチ
try~catch文での例外処理について、まとめて処理を書けるようになりました。
今までは、たとえ例外処理内容が同一であっても、例外の種類分記述が必要だったので、まとめて書けるようになるとかなりコードがすっきりします。
今までは、

としていたものが、

と書けるのです。

他にも数値リテラルに「_」が使えるようになったとか、リソース付きtry文が書けるとか、追加された機能はたくさんあります(気になる方は調べてみてください)。
Java8になればラムダ式も書けるそうなので、今から楽しみです。

最近書かなかったとはいえ、興味がなくなったわけじゃありません

最近、家でJavaの勉強をしています。
その中で、1つのホームページのように作成しているのですが、現在は以下のページを作成しております(・∀・)。

・ログイン画面
・メニュー画面
・カレンダー
・数字当てゲーム
・所属選択画面

数字当てゲームは、0~9までの数字を入力すると、その数字が当たりかはずれかを判断し、表示するゲームです。
当たりの場合、次の当たりの数字は変更されるように作成してあるので、何度でも挑戦できます。
所属選択画面は、ラジオボタンやチェックボックスで選択した値を、結果に一覧表示します。
この画面はまだまだ作成途中ですので、今後も改修を行っていきます。
その他にもたくさんのプログラムを作成し、充実させていこうと思います(`・ω・´)。

そういえば最近、有名どころのブラウザがまとめてバージョンアップされていますね。
今月だけでも、
11日:Firefox5.0.1
12日:Google Chrome12.0
20日:Lunascape6.5.3
21日:Safari5.1
がリリースされています。
私は専らFirefoxユーザーですが、こうやって片っ端からバージョンアップされると、それぞれ試してみたくなりますね。
とはいえ、私はIE、Firefox、ChromePlus、Opera、Safariをインストールしているんですが(笑)。
今回、エンジンがWebKit2になったSafariは、設定画面が少し変わっていました。
今後もそれぞれのブラウザが競い合って、よりよいものを作り上げていっていただきたいと思います。

長くやっていなかったFirefoxのアドオン紹介も、近々できればと思います(^^;)。