java定时器的实现
java中怎么实现定时功能?
java中怎么实现定时功能?
我们可以使用Timer和TimerTask类在java中实现定时任务,详细说明如下:
1、基础知识java.util.Timer一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。java.util.TimerTask由 Timer 安排为一次执行或重复执行的任务。
2、示例代码该示例实现这样一个功能,在系统运行期间,每30分钟,系统自动检查连接池中的可用连接数,并输出到日志中。首先创建一个需要定时执行的任务类,这个任务类需要继承TimerTask,然后重写run()方法,run()方法体中的代码就是定时需要执行的操作,在本demo中,就是获取连接池中当前可用连接数,并输出到日志中,具体实现代码如下:public class TaskAvailableConnectNumber extends TimerTask { private Logger log () private ConnectionPool () @Override publicvoid run() { (
JAVA如何中断定时任务?
创建定时任务时,如果我们不主动去取消定时任务,我们需要的任务内容执行完毕,但定时任务不会关闭。
启动定时任务时,相当于启动一个分线程,
下面写了两种:
一是通过定义参数,创建对象时,将定时器对象传入构造方法,从而确保我们关闭的是我们主动开启的那个任务
二是直接对当前线程进行中断、停止、销毁,后两种已经不推荐使用已经过时了
package timer
import
import
import java.util.Timer
import java.util.TimerTask
public class Demo
{
public static void main(String[] args) throws InterruptedException{
works()
}
/**
* 该方法验证的是有参构造方法的Works
* 使用定时器取消任务
* 定时器对象如何被继承TimerTask的类获取
* @throws InterruptedException
*/
public static void works() throws InterruptedException {
Timer t1 new Timer()
Works w new Works(t1)
(w, 6000)
for(int i5igt0i--)
{
(1000)
(任务还有 i s 开启 主线程线程名为: ().getName())
}
while(true)
{
Date datenew Date()
SimpleDateFormat danew SimpleDateFormat(HH:mm:ss)
(1000)
((date) ().getName())
}
}
}
class Works extends TimerTask{
public Timer t
public String TName
/**
* 构造方法,获取需要暂停的任务
* @param t1
*/
public Works(Timer t1) {
// TODO Auto-generated constructor stub
this.t t1
}
@Override
public void run() {
// TODO Auto-generated method stub
(定时任务为:该吃饭了!)
(定时任务即将关闭!)
can1()
//can2()
}
public void can1(){
//ttfor(int i3igt0i--)
//tt{
//ttttry {
(1000)
//tttt
//ttt} catch (InterruptedException e) {
//tttt// TODO Auto-generated catch block
()
//ttt}
//tttTName ().getName()
(倒计时: i s TName)
//tt}
()
(任务已关闭)
int m10
while(mgt0)
{
try {
(1000)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
()
}
TName ().getName()
(定时任务仍在继续: m s 定时任务线程名: TName)
m--
}
()
(任务已关闭)
}
public void can2() {
for(int i3igt0i--)
{
try {
(1000)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
()
}
(倒计时: i s)
}
().stop()
().destroy()
().interrupt()
(任务已关闭)
}
}