Java 定时器(Timer)及线程池里使用定时器实例代码
Java定时器(Timer)是Java语言提供的一种用于调度任务的机制,它允许开发者在特定的时间间隔执行任务,或者在指定的延迟后执行任务。而线程池中的定时器,通常指的是`ScheduledExecutorService`,它是Java并发包`java.util.concurrent`中的一个接口,提供了更强大、更灵活的定时任务管理能力。 ### Java Timer 定时器 Java `Timer` 类主要用于创建定时任务,它通过`TimerTask`类来定义需要执行的任务。以下是一个简单的`Timer`使用示例: ```java public class Test { public static void main(String[] args) { Timer mTimer = new Timer(); MyTask myTask = new MyTask(); mTimer.schedule(myTask, 2000, 3000); } static class MyTask extends TimerTask { @Override public void run() { System.out.println("执行任务"); } } } ``` 在这个例子中,`TimerTask`子类`MyTask`定义了要执行的任务。`mTimer.schedule()`方法安排任务在2秒后开始执行,并每隔3秒重复一次。 ### 线程池中的定时器(ScheduledExecutorService) 相比`Timer`,`ScheduledExecutorService`提供了更多的功能,例如它可以创建一个线程池来处理定时任务,支持定时或周期性执行任务。以下是一个使用`ScheduledExecutorService`的例子: ```java public class Test { public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(3); service.scheduleWithFixedDelay(new MyRunnable(), 0, 10000, TimeUnit.MILLISECONDS); } static class MyRunnable implements Runnable { @Override public void run() { int index = 0; while (index++ < 100) { System.out.println(Thread.currentThread().getName() + " " + index); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } } ``` 在这个例子中,`ScheduledExecutorService`创建了一个包含3个线程的线程池。`scheduleWithFixedDelay()`方法安排`MyRunnable`在0毫秒延迟后开始执行,并在每次执行结束后10秒再次执行,形成一个周期。 #### ScheduledExecutorService的特点: 1. **线程池管理**:可以控制线程的数量,避免大量线程导致的资源浪费。 2. **定时策略**:支持定时执行(`schedule()`)和固定延迟执行(`scheduleWithFixedDelay()`)。 3. **取消任务**:可以取消正在执行的任务或停止整个线程池。 4. **更健壮**:`ScheduledExecutorService`在处理异常时更加健壮,不会因单个任务失败而影响其他任务。 ### 结论 虽然`Timer`简单易用,但在多线程环境中可能会遇到一些问题,比如`Timer`线程与被调度任务线程之间的同步问题。而`ScheduledExecutorService`提供了更强大的功能和更好的线程管理,更适合于复杂的并发场景。在选择定时器时,应根据实际需求和系统性能来决定使用哪种方式。
- 粉丝: 5
- 资源: 953
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助