0

内部クラスを呼び出して、将来のタスクとして実行しています。

Runnable r = new sendEmails(ids);
FutureTask task = new FutureTask(r, null);
ExecutorService scheduler = Executors.newCachedThreadPool();
scheduler.submit(task);

これは次のようになります。

private class sendLGORejectionEmails implements Runnable {

  private final String ids; 

  private sendLGORejectionEmails(String param) {
    ids = param;
  }

  public void run() {
    for (int i; i<=num_o_emails; i++) {
      Code that send emails and use 'ids' to do it;
    }
  }
}

タスクがスケジューラーに送信された後、コードはユーザーをそのページからWebページに転送します。ajaxを使用して送信されている電子メール(プログレスバー)をチェックしたいので、getを使用してタスクかどうかを確認できます。完了したかどうかはわかりませんが、ループの処理中にiの値を要求できるようにしたいのです。そうすれば、一連のajax投稿を作成して、iを進捗ポイントに変換できます。タスクの実行中にiの値を確認する呼び出しを行うにはどうすればよいですか?

4

1 に答える 1

0

forループ内のcount変数をループ外で定義することができます。

int globalCounter = 0;コードでは、ループの外側で新しいカウンターを使用できます。グローバルカウンターを使用するようにループを変更しますfor (; globalCounter <=num_o_emails; globalCounter ++)。このようにintして、ループの外側からそれを呼び出して、現在の設定値を確認できます。

ただし、このクラスの外部から番号にアクセスしていて、番号を変更(加算/減算など)する場合は、競合状態に注意してカウンターを更新してください(ループおよび外部メソッドの場合)。 。

于 2013-03-04T20:21:17.020 に答える