« カルテ保存後ウインドウを閉じる(続) | トップページ | SendClaimImpl.java の BufferedOutputStream »

2009年9月15日 (火)

ScheduledExecutorService の使い回し

jconsole というツールが jdk に標準で入っている。ヒープメモリやスレッドの状態を教えてくれるツールであるが,そんなものがあることを初めて知った。jconsole で見ていたら,靴ボタンを押して受付患者チェックをすると,ライブスレッドがどんどん増えていくことに気がついた。試しに靴ボタンを連打してみたら,えらいことになった。普通そんなことはしないので問題ないのかもしれないが,気持ち悪いのでScheduledExecutorService は使い回すことにした。これで,靴ボタンを連打しても大丈夫。

 

plugin/WatingListImpl.java

////↓
private DocumentPeeker peeker;
private ScheduledExecutorService schedule;
private static final Color SHOSHIN_COLOR = new Color(180,220,240); //青っぽい色
private static final Color KARTE_EMPTY_COLOR = new Color(250,200,160); //茶色っぽい色
private static final Color DIAGNOSIS_EMPTY_COLOR = new Color(243,255,15); //黄色
////↑

/** 
 * Creates new WatingList 
 */
public WatingListImpl() {
  setName(NAME);
  ////↓   使い回すオブジェクト
  peeker  = new DocumentPeeker();
  schedule = Executors.newSingleThreadScheduledExecutor();
  ////↑
}
 ・
 ・
 public void restartCheckTimer() {
 ・
 ・
  ////↓   schedule は,コンストラクタで作って使い回すことにする
  // ScheduledExecutorService schedule = Executors.newSingleThreadScheduledExecutor();
  timerHandler = schedule.scheduleWithFixedDelay(pvtChecker, 0, checkInterval, TimeUnit.SECONDS);
}
 ・
 ・
public void checkFullPvt() {
  if (timerHandler != null) {
    ////↓ 定期チェック中ならチェックしない
    if (timerHandler.getDelay(TimeUnit.SECONDS) <= 1) {
      logger.info("regular pvtChecker in process");
      return;
    }
    ////↑
    timerHandler.cancel(false);
  }
 ・
 ・
  ////↓   schedule は,コンストラクタで作って使い回すことにする
  // ScheduledExecutorService schedule = Executors.newSingleThreadScheduledExecutor();
  timerHandler = schedule.scheduleWithFixedDelay(pvtChecker, checkInterval, checkInterval, TimeUnit.SECONDS);
}

« カルテ保存後ウインドウを閉じる(続) | トップページ | SendClaimImpl.java の BufferedOutputStream »

OpenDolphin」カテゴリの記事