Linux名前付きパイプによるC – Javaプロセス間通信

C – Javaプロセス間通信をするにはJNIやソケット通信といった方法があるけれども、Linux前提なら名前付きパイプの方がリソース的によさげなので実装方法のメモ。

送信側(C)

受信側(Java)

実行用シェルスクリプト

mkfifoでパイプを作ったらそれを読み書きするだけ

Singletonクラス設計

Got my homework back...Got my homework back… / scottfeldstein

 

いくつか落とし穴がありそうだったのでメモしておく。
参考:
http://www.atmarkit.co.jp/fjava/javatips/075java007.html
http://www.ibm.com/developerworks/java/library/j-dcl/index.html

@ITによると、

Singletonパターンのポイントは、「コンストラクタをprivateにしてしまう」ことです。そして、唯一のインスタンスをprivateなstatic変数として保持しておくのです。こうすることで、そのクラスがJava仮想マシンへロードされたときに、一度だけインスタンスが生成されます。そして、これ以後、インスタンスの生成は構造上不可能になります。インスタンスの取得には、専用のstaticメソッドを用意します。

とのことだが、この場合、コンストラクタに動的な引数を与えることができない。
*具体的には、AndroidのContextをコンストラクタに渡したいケースとか

となると、GoFパターンをベースにすることになるのだが、マルチスレッド時に問題があるらしい。結局のところ、Synchronizedを使ってしまうのが手っ取り早い。当然、パフォーマンスが問題になるようなケースでは使えないが。