java定时器Timer,TimerTask每隔一段时间随机生成数字

本文介绍如何使用Java中的Timer类和TimerTask类实现定时任务。通过示例代码展示了一次性和周期性任务的创建方法,并提供了两种生成随机数的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

2:TimerTask类是由 Timer 安排为一次执行或重复执行的任务,因为有TimerTask类是一个抽象类,必须有其子类对其实现来完成定时任务的功能。

TimerCallClient .java客户端代码:

package com.skyon.gd.test;

import java.util.Timer;

/**
 * 
 * @author sandy
 * 
 */
public class TimerCallClient {
	public static void main(String[] args) {
		run();
	}
	private static void run() {
		Timer timer = new Timer();
		NewTimerTask timerTask = new NewTimerTask();
		//程序运行后立刻执行任务,每隔100ms执行一次
		timer.schedule(timerTask, 0, 100);
	}

}

 NewTimerTask.java代码:

/**
 * 
 */
package com.skyon.gd.test;

import java.util.Random;
import java.util.TimerTask;

/**
 * @author sandy
 * TimerTask类是一个抽象类
 */
public class NewTimerTask extends TimerTask {

	@Override
	public void run() {
		createRandomNumber();
		createRandomNumberFromMathRandom();
	}
	//用纯Math中的方法来随机生成1-10之间的随机数
	private void createRandomNumberFromMathRandom() {
		int j=(int)(Math.round(Math.random()*10+1));
		System.out.println("随机生成的数字为:"+j);
		
	}
	//用Random类的方式来随机生成1-10之间的随机数
	private void createRandomNumber(){
		 Random random=new Random(System.currentTimeMillis());
		 int value=random.nextInt();
		 value=Math.abs(value);
		 value=value%10+1;
		 System.out.println("新生成的数字为:"+value);
	}
}

 

 

### Java 实现精确到秒的定时任务 #### 使用 `Timer` 和 `TimerTask` 为了实现每秒钟触发的任务,可以通过创建一个继承自 `TimerTask` 的类来完成。在这个类中的 `run()` 方法里编写具体要执行的操作。接着利用 `Timer` 类实例化对象并调用它的 `scheduleAtFixedRate(TimerTask task, long delay, long period)` 方法设置初始延时以及周期性的重复时间间隔。 ```java import java.util.Timer; import java.util.TimerTask; public class SecondlyTask extends TimerTask { @Override public void run() { System.out.println("Timer/TimerTask 定时任务执行:" + System.currentTimeMillis()); } public static void main(String[] args) { Timer timer = new Timer(); SecondlyTask secondlyTask = new SecondlyTask(); // 设置无延迟启动,在每一秒结束时运行此任务 timer.scheduleAtFixedRate(secondlyTask, 0L, 1000L); } } ``` 这种方法简单易懂但是存在局限性,比如当 JVM 关闭时所有未完成的任务都会被取消,并且如果某个任务耗时过长可能会导致后续任务堆积等待被执行[^1]。 #### 使用 `ScheduledExecutorService` 更推荐的方式是采用 `ScheduledExecutorService` 接口及其默认实现类 `ThreadPoolScheduler` 来管理线程池资源,从而更加高效稳定地处理多个并发任务。下面是一个简单的例子展示如何配置一个固定频率为一秒的任务: ```java import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledSecondlyTask { private final Runnable command = () -> { System.out.println("ScheduledExecutorService 定时任务执行:" + System.currentTimeMillis()); }; public static void main(String[] args) throws InterruptedException { ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); // 初始化后立即开始第一次执行,之后每隔一秒钟再次执行 scheduler.scheduleAtFixedRate(new ScheduledSecondlyTask().command, 0, 1, TimeUnit.SECONDS); // 防止主线程提前退出 Thread.sleep(10_000); // 停止调度器 scheduler.shutdownNow(); } } ``` 这种方式不仅能够更好地控制多线程环境下的任务分配,而且提供了更多灵活性和可靠性选项,如支持异常恢复机制等特性[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值