- 浏览: 188363 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Errorize:
一个用servlet实现导出csv文件的实例 -
wendellhu:
求monkey talk应用文档的解压密码
monkey talk应用文档 -
wendellhu:
加密的?
monkey talk应用文档 -
hugang357:
hslh22 写道不错的资源,可以使用,只是没有最大最小值的限 ...
数字微调输入框 -
hslh22:
不错的资源,可以使用,只是没有最大最小值的限制,需要自己去加逻 ...
数字微调输入框
今天看了一下Timer与TimerTask的用法并且在网上找了些相关的例子,
线程启动之后,定时调用run()方法,执行具体任务操作,可以重载TimerTask类的方法run(),自定义用户想要的操作。
例子一:
//这里只是简单的打印一下任务参数
public class myTask
extends java.util.TimerTask {
String jobName;
private int i;
public void run() { //run in interface Runnable
System.out.println(jobName);
}
public myTask(String jobName) {
this.jobName = jobName;
}
}
//doTask.java
import java.util.*;
import java.io.*;
public class doTask {
private java.util.Timer timer;
private java.util.TimerTask task;
public doTask(java.util.TimerTask task) {
this.timer = new Timer();
this.task = task;
}
public void start(int delay, int internal) {
timer.schedule(task, delay * 1000, internal * 1000);//利用timer.schedule方法
}
public static void main(String[] args) {
java.util.TimerTask task1 = new myTask(" Job 1");
java.util.TimerTask task2= new myTask("Job 2");
doTask pt = new doTask(task1);
pt.start(1,3);
doTask pt2 = new doTask(task2);
pt2.start(1,1);
}
}
这是在一定的间隔时间执行重复的任务,java.util.Timer可以很简单的帮你实现。当然你也可以用多线程来实现。下面是用java.util.Timer来实现这个功能。
例子二:
//文件TimerUse
package src;
import java.util.*;
import java.io.*;
public class TimerUse
{
public static void main(String[] args)
{
PickTask pt = new PickTask();
pt.start(1,3);
}
}
//文件PickTask
package src;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
public class PickTask
{
private Timer timer;
public PickTask(){
timer = new Timer();
}
private TimerTask task = new TimerTask()
{
public void run(){
try{
BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
String data = null;
while((data=br.readLine())!=null){
System.out.println(data);
}
}
catch(FileNotFoundException e){
System.out.println("can not find the file");
}
catch(IOException e){
e.printStackTrace();
}
}
};
public void start(int delay,int internal )
{
timer.schedule(task,delay*5000,internal*1000);
}
}
(1)方法选择。
一,使用高级的线程API,包括:
1.如果想重复的调用某个任务,或者想在一定延迟之后进行某项工作,推荐使用java.util.Timer和java.util.TimerTask组合;
2.如果想写一个GUI程序,推荐使用java.swing.Timer;
3.类SwingWorker用于后台线程。
二,继承java.lang.Thread类。
三,实现Runnabl接口。
(2)方法介绍。
1.使用java.util.Timer 和 java.util.TimerTask。
Timer类构造器有:
Timer() ; // 默认
Timer( boolean isDaemon ) ; // 是否是daemon线程
用法:
用一个类(MyTask)继承TimerTask,把要执行的任务放在该类的run方法中,然后创建一个Timer对象(新线程):
Timer timer = new Timer();
并拟定计划:
timer.schedule( new MyTask() , delayedTimeInMillisecond ); // 用于延迟一定时间后执行
timer.schedule( new MyTask() , time ); // 用于在给定的时间点执行,time是Date类的一个实例
timer.schedule( new MyTask(), initialDelay, interval ) // 用于重复执行
终止线程的方法:
timer.cancel();
当只剩下daemon线程时
当MyTaskd的run()执行完时,去除所有对timer的引用
System.exit(0); // 所有的线程都终止
2.继承Thread类并覆盖run()方法
没什么好说的,但是要记得start()哦~
Thread的构造器有:
Thread( threadName );
Thread( runnableObject , threadName );
3.实现Runnable接口
方法就是实现一个Runnable的类,并把实例传给Thread类的构造器,以创建新的线程。如:
public class MyTask implements Runnable {
private int index;
public MyTask( int index ) { this.index = index; }
public void run() {
System.out.prinln( " Task " + index + " is running." );
}
public static void main( String[] args ) {
for( int i=0; i<100; i++ )
new Thread( new MyTask(i), String.valueOf(i) ).start();
}
}
有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务,本文提供一个应用程序的源代码告诉你如何使用这两个类。
Timer和TimerTask的方法很少,使用起来也非常方便。希望如果遇到问题参考一下API doc,里面写的很清楚。TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现public void run()方法。这也就是我们需要执行的具体任务。Timer实际上是用来控制Task的,他提供的主要方法是重载的schedule()方法。我们这里将使用schedule(TimerTask task,long time,long internal)方法来说明如何使用它。
使用Java中的Timer和TimerTask
-------------------------
下面直接提供应用程序的源代码,有得时候感觉说的太多,对初学者作用并不是很大。但是当把代码给他们看了以后,很容易就接受了。下面我要完成的任务就是每隔3秒钟从一个文件中把内容读出来并打印到控制台,文件的内容如下:
ming.txt
hello world
beijing
basketball
java
c/c++
这里涉及到一些IO的知识,但并不复杂。我们使用BufferedReader从文件里面读取内容,一行一行的读取,代码如下:
try
{
BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
String data = null;
while((data=br.readLine())!=null)
{
System.out.println(data);
}
}
catch(FileNotFoundException e)
{
System.out.println("can not find the file");
}
catch(IOException e)
{
e.printStackTrace();
}
在主程序中我们启动timer让他开始执行读取文件的工作。整个程序的内容如下
import java.util.*;
import java.io.*;
public class TimerUse
{
public static void main(String[] args)
{
PickTask pt = new PickTask();
pt.start(1,3);
}
}
class PickTask
{
private Timer timer;
public PickTask()
{
timer = new Timer();
}
private TimerTask task = new TimerTask()
{
public void run()
{
try
{
BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
String data = null;
while((data=br.readLine())!=null)
{
System.out.println(data);
}
}
catch(FileNotFoundException e)
{
System.out.println("can not find the file");
}
catch(IOException e)
{
e.printStackTrace();
}
}
};
public void start(int delay,int internal )
{
timer.schedule(task,delay*1000,internal*1000);
}
}
程序的输出结果为:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\>java TimerUse
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++
发表评论
-
12hh
2013-06-07 09:35 783fdgtg -
百度只剩1
2012-03-22 00:10 0附件 -
Timer与TimerTask入门
2011-05-24 22:52 861Java2的开发包中提供了 ... -
web应用每晚12点定时执行程序代码实例
2011-05-24 22:50 20951、当前web应用的web.xml文件配置容器监听类com ... -
Tomcat java 定时任务
2011-05-24 22:49 1215如何在Web工程中实现任 ... -
Java定时器在Web中的应用
2011-05-24 22:46 937本文实例的最终功能是每天某个时间点(如每晚22点)执行某一功能 ... -
java 导出成.csv文件的乱码问题
2011-05-19 23:54 2579已经解决因为所有页面都是用UTF-8的编码方式。本以为这 ... -
一个用servlet实现导出csv文件的实例
2011-05-19 23:49 3249Java采用反射导出CSV文件替代导出Excel p ... -
Google分页的经典案例
2011-05-05 22:26 796上一页 [1][2][3][4][5][6] ... -
Google分页的经典案例
2011-05-05 22:25 10031 、创建 Page 类, pack ... -
网络管理:openldap详解
2011-04-27 22:45 1110简介 LDAP是轻量目录 ... -
openldap的配置手册
2011-04-27 22:44 931最近一直在安装opneldap-2 ... -
slapd.conf 配置文件中的高级功能使用方法
2011-04-27 22:42 14911. 开启日志功能启用日 ... -
OpenLDAP主配置文件slapd.conf介绍
2011-04-27 22:41 1293安全起见,slapd.conf文件应该只让运行此进程的用户可读 ... -
定制你的LDAP目录的Schema
2011-04-27 22:38 1237(http://www.infoxa.com/asp/tech ... -
ubuntu 8.04上openldap的安装和使用
2011-04-27 22:36 10581、安装openldap。$ sudo apt-get ins ... -
ubuntu上部署OpenLDAP
2011-04-27 22:34 1787原文地址:https://help.ubuntu.com/co ... -
OpenLDAP中 Schema的详细介绍
2011-04-27 22:33 3163本章讲述了如何扩展用户使用的schema。本章假设阅读者已经熟 ... -
第一个JFreeChart实例
2011-01-21 00:12 2551JFreeChart的使用非常简单,我们只需要提供满 ... -
JFreeChart简介及下载、配置
2011-01-21 00:00 1767JFreeChart简介 JFreeChart是 ...
相关推荐
`Timer`实例一旦创建,就会持续运行,直到所有的任务都执行完毕,或者通过调用`cancel`方法显式地停止。 **2. TimerTask类** `TimerTask`是`Timer`用来执行任务的抽象类,你需要继承它并覆盖`run`方法来定义具体的...
### Timer和TimerTask的使用详解 #### 一、引言 `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现...
### Timer与TimerTask详解 在Java编程语言中,`Timer`和`TimerTask`是用于执行定时任务的重要类。这两个类通常被用来处理那些需要在指定时间或周期性执行的任务,比如定时清理缓存、定时更新数据库等场景。 #### ...
它是用来执行任务的类,接收一个TimerTask实例作为参数。通常,Timer类有两种执行任务的模式。最常用的是schedule模式,它可以通过两种方式执行任务:在某个特定时刻开始执行任务;从当前时刻开始,在某个固定时段...
`Timer`类主要负责调度任务,可以创建一个定时器实例,然后安排一个或多个`TimerTask`在未来执行。它有两种主要的方法:`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long ...
2. **创建定时器并调度任务**:接着创建一个 `Timer` 实例,并使用 `scheduleRepeated` 方法调度任务。 ```cpp Timer timer; TimerTaskPtr task = new PrintMessageTask(); timer.scheduleRepeated(task, ...
在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们构成了Java的定时执行机制。这两个类在处理周期性任务或者延迟任务时非常有用,它们可以帮助开发者实现程序在特定时间点或者按照一定间隔执行特定操作的...
然后,我们可以创建一个`Timer`实例,并使用`schedule()`方法来安排`TimerTask`的执行: ```java Timer timer = new Timer(); MyTimerTask task = new MyTimerTask(findViewById(R.id.textView)); timer.schedule...
1. **线程安全**:由于`Timer`和`TimerTask`不是线程安全的,因此在多线程的Web应用中,如果多个线程共享同一个`Timer`实例,可能会导致任务调度混乱。为避免这种情况,通常每个任务应拥有自己的`Timer`实例。 2. *...
这意味着,如果你为同一个`Timer`实例创建了多个`TimerTask`,它们将按照添加到队列的顺序依次执行,而不是并发执行。这在处理多个定时任务时需要注意,因为任务间的依赖关系可能会影响程序的逻辑。 需要注意的是,...
创建一个`Timer`实例后,可以通过调用`schedule`或`scheduleAtFixedRate`方法来安排任务的执行。下面是一个简单的例子: ```java class MyTask extends TimerTask { @Override public void run() { // 执行的...
下面是一个简单的Timer和TimerTask的实例: ```java import java.util.Timer; import java.util.TimerTask; public class TimerTest { static class MyTimerTask1 extends TimerTask { public void run() { ...
一旦创建了 `TimerTask` 实例,就可以通过 `Timer` 对象的 `schedule()` 方法来安排它的执行。 例如,下面是一个简单的 `TimerTask` 示例,它每秒钟打印一条消息: ```java class PrintTask extends TimerTask { ...
`Timer`类是一个线程类,它负责调度和执行`TimerTask`实例。`Timer`类主要有两个方法来安排任务执行: 1. `schedule(TimerTask task, long delay)`:这个方法会在指定的延迟(以毫秒为单位)后执行一次任务。例如,...
你需要创建一个`TimerTask`实例,并覆盖其`run()`方法,将需要定时执行的代码放入这个方法。然后将`TimerTask`对象传递给`Timer`的`schedule`方法,`Timer`就会在指定的时间点调用`run()`。 3. **Handler** ...
总结起来,Java的Timer和TimerTask在Android中是实现定时任务的强大工具,它们允许我们在后台线程中按照预设的时间间隔执行任务,并通过Handler与主线程通信,安全地更新UI。然而,使用时需要注意线程管理、资源释放...
Timer和TimerTask是Java编程语言中用于定时任务执行的两个核心类,它们与线程有着密切的关系。在本文中,我们将深入探讨这两个类的工作原理以及它们如何与线程交互。 首先,`Timer`是一个定时器类,它的主要功能是...
值得注意的是,`Timer`和`TimerTask`并不是线程安全的,因此不建议在多线程环境中直接共享一个`Timer`实例。另外,如果`TimerTask`的执行时间超过预定的调度间隔,可能会导致任务堆积,这被称为“定时器饥饿”。为...
首先,创建一个`@Component`,实现`TimerTask`,然后定义一个`@Bean`方法来创建`TaskScheduler`实例。 ```java @Component public class SpringTimerTask { private final TimerTask task; public ...
它通过`Timer`类和`TimerTask`类的配合使用来实现定时功能。这两个类位于`java.util`包中。 `Timer`类是定时器的管理器,它负责调度任务的执行。创建一个`Timer`实例后,可以通过`schedule`或`scheduleAtFixedRate`...