質問
たいと思っていますjava.utils.タイマーとresettable時間java.またオフイベント発生がX秒です。場合は何も起こらなくなる時間にタイマーを作成しX秒、そのイベントが発生するとしています。
しかし、X秒が経過すると、どうしたらよろしいですかの事故が発生した後Y秒ではなく、その思いを伝えることができるように、タイマーをリセット、そのような色合いとなり、次のように、イベントが発生するY秒です。E.g.タイマーの動きを次のように:
Timer timer = new Timer();
timer.schedule(timerTask, 5000); //Timer starts in 5000 ms (X)
//At some point between 0 and 5000 ms...
setNewTime(timer, 8000); //timerTask will fire in 8000ms from NOW (Y).
きというものはないと思いないというこのダイマーは、お問い合わせいただいた場合の解除()ができな日程を設定することができます。
みっく近い複製はこの動作は、javax.swing.タイマーを停止origionalタイマーを新規作成します。すなわち:
timer.stop();
timer = new Timer(8000, ActionListener);
timer.start();
はあります。?
解決
に応じて Timer
文書では、Java1.5以降、好の ScheduledThreadPoolExecutor
です。(できのように作りこのexecutorを使用 Executors
.newSingleThreadScheduledExecutor()
のための使いやすさ;このように Timer
.)
にカッコいいところがスケジュールのタスクの呼び出さ schedule()
)を返します ScheduledFuture
オブジェクトです。利用することができ止の予定です。使わないようご注意ください無料の提出課題が異なるトリガす。
ETA:の Timer
書類にリンクしないと言うことな ScheduledThreadPoolExecutor
, しかし、 OpenJDK versionたは次のようにコメントしている。
Java5.0を導入し
java.util.concurrent
パッケージ 一つの並行処理費を期待することができるのScheduledThreadPoolExecutor
であるスレッドプールを繰り返し タスクの実行で指定する。で効果的に、より 多彩な差し替え用のTimer
/TimerTask
組み合わせで、複数のサービスドレスの受け入れ各種 時間単位で、必要としませんが、サブクラスTimerTask
( の実施Runnable
).の設定ScheduledThreadPoolExecutor
一つのスレッドで同等のTimer
.
他のヒント
の場合 Timer
でっかいタスクを実行しているのは、サブクラスで
import java.util.Timer;
import java.util.TimerTask;
public class ReschedulableTimer extends Timer
{
private Runnable task;
private TimerTask timerTask;
public void schedule(Runnable runnable, long delay)
{
task = runnable;
timerTask = new TimerTask()
{
@Override
public void run()
{
task.run();
}
};
this.schedule(timerTask, delay);
}
public void reschedule(long delay)
{
timerTask.cancel();
timerTask = new TimerTask()
{
@Override
public void run()
{
task.run();
}
};
this.schedule(timerTask, delay);
}
}
また、コードの追加をチェックのための誤用でをすべきだと考えている。の ScheduledThreadPoolExecutor
しているようには思えない内蔵のサービスをご利用いただけ変更、既存の課題からも同様のアプローチは示されている場合もあります。
全体のコードスニペットは以下のようになります....あなたにとってどんな年でしたが、フローラルホール
{
Runnable r = new ScheduleTask();
ReschedulableTimer rescheduleTimer = new ReschedulableTimer();
rescheduleTimer.schedule(r, 10*1000);
public class ScheduleTask implements Runnable {
public void run() {
//Do schecule task
}
}
class ReschedulableTimer extends Timer {
private Runnable task;
private TimerTask timerTask;
public void schedule(Runnable runnable, long delay) {
task = runnable;
timerTask = new TimerTask() {
public void run() {
task.run();
}
};
timer.schedule(timerTask, delay);
}
public void reschedule(long delay) {
System.out.println("rescheduling after seconds "+delay);
timerTask.cancel();
timerTask = new TimerTask() {
public void run() {
task.run();
}
};
timer.schedule(timerTask, delay);
}
}
}
させていただきます。予定を繰り返す。その場合にはお勧めします。検討 石英.
とは思わないでい Timer/TimerTask
, ものによって何を達成したいのが嬉しい利用 java.util.concurrent.ScheduledThreadPoolExecutor
.
このようにしています。しているクラスの世論調査データベース60秒ご利用TimerTask.
私のメインクラスまたはインスタンスのタイマーのインスタンスもサブクラスのTimerTask.のクラスは、法定のポーリング間隔(例えば今から60 30分)までとなります。に、これまでのキャンセルTimerTaskるもの(サブクラスは、overwroteない場合はキャンセルの方法をいくつかの清掃がいなしでnullになります。った形での新しいインスタンスで、スケジュールの新しいインスタンスを新しい区間の既存のタイマー.
以来、タイマーなが消滅した場合、そのスレッドで使用したアクティブ(その他のTimerTasksの中で、旧TimerTaskが新しくなり、そっくり同じですが、バージン(年齢の違いによって実行され、予定ではなくなったヴァージンとして必要なケジューリング).
りたいときにシャットダウンのタイマー、キャンセル-nullのTimerTaskと同じかったのを変更する場合には、そのタイミングに、清掃のための資源を私のクラスのサブクラスTimerTask、その後の解除およびnullの場合、タイマーです。
ここでは例Resetableますテットンと申します。を変更してみてくださいであるかどうか、そしてあなたのconvinence...
package com.tps.ProjectTasks.TimeThread;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Simple demo that uses java.util.Timer to schedule a task to execute
* every 5 seconds and have a delay if you give any input in console.
*/
public class DateThreadSheduler extends Thread {
Timer timer;
BufferedReader br ;
String data = null;
Date dNow ;
SimpleDateFormat ft;
public DateThreadSheduler() {
timer = new Timer();
timer.schedule(new RemindTask(), 0, 5*1000);
br = new BufferedReader(new InputStreamReader(System.in));
start();
}
public void run(){
while(true){
try {
data =br.readLine();
if(data != null && !data.trim().equals("") ){
timer.cancel();
timer = new Timer();
dNow = new Date( );
ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Modified Current Date ------> " + ft.format(dNow));
timer.schedule(new RemindTask(), 5*1000 , 5*1000);
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
System.out.format("Printint the time and date was started...\n");
new DateThreadSheduler();
}
}
class RemindTask extends TimerTask {
Date dNow ;
SimpleDateFormat ft;
public void run() {
dNow = new Date();
ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
この例では、版画の現在の日付と時間5秒で---なければ入力コンソールにはタイマー時間を変更することを、指定された入力。
また、自分のタイマーのクラスに同様の目的お気軽にご利用い:
public class ReschedulableTimer extends Timer {
private Runnable mTask;
private TimerTask mTimerTask;
public ReschedulableTimer(Runnable runnable) {
this.mTask = runnable;
}
public void schedule(long delay) {
if (mTimerTask != null)
mTimerTask.cancel();
mTimerTask = new TimerTask() {
@Override
public void run() {
mTask.run();
}
};
this.schedule(mTimerTask, delay);
}
}