黑马程序员---java线程Timer学习与总结

                           ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Timer是java.util包中的帮助工具类,一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。通常这个类就是TimerTask类。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。  

java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks。

Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率。

package com.tai.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest
{
    public static void main(String[] args)
    {
        //3000毫秒后执行run方法
        new Timer().schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                System.out.println("start");
            }
        },3000);
        //3000毫秒后执行run方法 以后每隔1000毫秒执行一次
        new Timer().schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                System.out.println("start");
            }
        },3000,1000);
        
        while (true)
        {
            try
            {
                Thread.sleep(1000);
                System.out.println(new Date().getSeconds());
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
        
        
    }
}

也可以用自己的TimerTask类去继承TimerTask类

package com.tai.timer;

import java.util.Timer;
import java.util.TimerTask;

public class TimerTest2
{
    public static void main(String[] args)
    {
        new Timer().schedule(new MyTimertask(),2000);
    }
}

class MyTimertask extends TimerTask{
    @Override
    public void run()
    {
        System.out.println("start");
        new Timer().schedule(new MyTimertask(),2000);
    }
}

两个TimerTask不同时间间隔循环调度

package com.tai.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Timer4
{
    public static void main(String[] args)
    {
         new Timer().schedule(new TimerSub1(),2000);
        
         while (true)
            {    try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                System.out.println(new Date().getSeconds());
            }
    }
    
}
class TimerSub1 extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("From TimerTask1");
        new Timer().schedule(new TimerSub2(),2000);
    }
}
class TimerSub2 extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("From TimerTask2");
        new Timer().schedule(new TimerSub1(),4000);
    }
}

上面这种两个TimerTask不同时间间隔循环调度的方式还有多种方式:如:

package com.tai.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Timer4
{
    public static void main(String[] args)
    {
         new Timer().schedule(new TimerSub1(),2000);
        
         while (true)
            {    try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                System.out.println(new Date().getSeconds());
            }
    }
    
}
class TimerSub1 extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("From TimerTask1");
        new Timer().schedule(new TimerSub2(),2000);
    }
}
class TimerSub2 extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("From TimerTask2");
        new Timer().schedule(new TimerSub1(),4000);
    }
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值