[基本機能]デーモンスレッド

サービスは、メモリ中にホスティングされ常駐する性質上、アプリケーションから要求されたタイミングで提供する機能と、裏で処理を行う機能を持つ場合があります。
後者の場合、何らかのタイミングで活性化し、処理を行うスレッドが必要になります。そのようなスレッドを一般的にデーモンスレッドと呼びます。
一方、Javaのスレッドは、デッドロックを回避するために、スレッドの一時停止及び再開、 停止などの操作をフラグ操作によって自前で実装する事を推奨しています。 そのため、スレッドAPIの使用には、テクニックを要求されます。
Nimbusでは、そのようなデーモンスレッドの実装を簡単に行えるように、このライブラリ を提供しています。

関連するパッケージは、以下です。

以下に、簡単なサンプルコードを示します。

  1. import java.io.*;
  2. import jp.ossc.nimbus.daemon.Daemon;
  3. import jp.ossc.nimbus.daemon.DaemonControl;
  4. import jp.ossc.nimbus.daemon.DaemonRunnableAdaptor;
  5. // デーモンスレッドを生成する
  6. Daemon daemon = new Daemon(
  7. new DaemonRunnableAdaptor(){
  8. public java.lang.Object provide(DaemonControl ctrl) throws java.lang.Throwable{
  9. // 標準入力を1行読み込んで供給する
  10. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  11. return br.readLine();
  12. }
  13. public void consume(java.lang.Object line, DaemonControl ctrl) throws java.lang.Throwable{
  14. // 標準入力が"exit"の場合、デーモンスレッドを停止する
  15. // そうでない場合、標準出力に出力する
  16. if(line == null || line.equals("exit")){
  17. ctrl.setRunning(false);
  18. }else{
  19. System.out.println("おうむ返し:" + line);
  20. }
  21. }
  22. }
  23. );
  24. // デーモンスレッドを開始する
  25. daemon.start();
  26. // デーモンスレッドが停止するまで待機する
  27. daemon.stopWait();