使用 timer 和 timerTask 同步 java 线程

java.util.timer 是一个可以用来调度的类(java scheduler) 与线程关联的任务,以便在将来执行。任务可以定期运行一次或重复运行。

多个线程可以共享 timer前提是将同步 java.

java.util.TimerTask 是一个实现 可运行。我们需要从这个类继承来创建我们的 TimerTask将使用timertimer 使用 wait and notify 方法来调度进程。

下面是 timer 实现的示例:

import java.awt.Toolkit;
import java.util.Date;
导入 java.util.Timer;
import java.util.TimerTask;

public class TimerTask{

static Toolkit toolkit;

public TimerTask(){
toolkit = Toolkit.getDefaultToolkit();
TimerTask timerTask = new executetask();
//以 deamon
Timer timer = new Timer(true);
//在预定义的时间内为将来执行的任务提供任务
timer.schedule(timerTask, 0, 1*1000);
System.out.println(TimerTask 已启动”);
//10s后取消
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
timer.cancel();
System.out.println(TimerTask 已停止”);
}

class executetask extends TimerTask {
@Override
public void run() {
System.out.println(Starts: ”+new Date());
尝试 {
//2 秒完成任务
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
toolkit.beep();
System.out.println(完成: ”+new Date());
}
}

public static void main(String args[]){
new TimerTask();
}
}
Output

shedule

这是一个任务管理器的简单示例。计时器将启动一个 任务 每 1 秒(1000 毫秒)重复一次,间隔固定。使用方法 schedule() 它作为参数:
  • La 任务 待订购。
  • The Time Before任务 将被执行。以毫秒为单位.
  • 连续执行之间的时间任务 或执行频率(以毫秒为单位)。
编译此程序的结果表明,计时器正在等待正在运行的进程完成,以便它可以移动到队列中的下一个进程。

Timer.cancel() 取消计时器和所有任务 在队列中。一旦完成,它就完成了守护程序线程也终止。

引用:
Oracle: Timer class
Oracle: timerTask 类
java2s:Toolkit beep
javapoint: 守护程序线程