JAVA的心跳包

在应用开发中,经常需要一些周期性的操作,比如每5分钟检查一下新邮件等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。比如下面的代码每5分钟检查一遍是否有新邮件:                   private   java.util.Timer   timer;       timer   =   new   Timer(true);       timer.schedule(     new   java.util.TimerTask()   {   public   void   run()   {   //server.checkNewMail();   检查新邮件   }   },   0,   5*60*1000);                           使用这几行代码之后,Timer本身会每隔5分钟调用一遍server.checkNewMail()方法,不需要自己启动线程。Timer本身也是多线程同步的,多个线程可以共用一个Timer,不需要外部的同步代码。       在《The   Java   Tutorial》中有更完整的例子:       public   class   AnnoyingBeep   {   T       Toolkit   toolkit;         Timer   timer;         public   AnnoyingBeep()   {           toolkit   =   Toolkit.getDefaultToolkit();           timer   =   new   Timer();           timer.schedule(new   RemindTask(),   0,   //initial   delay   1*1000);   //subsequent       rate         }                   class   RemindTask   extends   TimerTask   {           int   numWarningBeeps   =   3;           public   void   run()   {             if   (numWarningBeeps   >   0)   {             toolkit.beep();               System.out.println("Beep!");               numWarningBeeps--;             }             else   {               toolkit.beep();               System.out.println("Time&acute;s   up!");               //timer.cancel();   //Not   necessary   because   we   call               System.exit   System.exit(0);               //Stops   the   AWT   thread   (and   everything   else)             }           }         }         ...     }       这段程序,每隔3秒响铃一声,并打印出一行消息。循环3次。程序输出如下:       Task   scheduled.       Beep!       Beep!   //one   second   after   the   first   beep       Beep!   //one   second   after   the   second   beep       Time&acute;s   up!   //one   second   after   the   third   beep                   Timer类也可以方便地用来作为延迟执行,比如下面的代码延迟指定的时间(以秒为单位)执行某操作。类似电视的延迟关机功能。                   ...public   class   ReminderBeep   {         ...   public   ReminderBeep(int   seconds)   {           toolkit   =   Toolkit.getDefaultToolkit();           timer   =   new   Timer();           timer.schedule(new   RemindTask(),   seconds*1000);           }           class   RemindTask   extends   TimerTask   {             public   void   run()   {               System.out.println("Time&acute;s   up!");               toolkit.beep();               //timer.cancel();   //Not   necessary   because   we   call           System.exit   System.exit(0);               //Stops   the   AWT   thread   (and   everything   else)             }           }         ...       }     }       import java.util.concurrent.*;import java.util.*;public class TimerTask implements Runnable ...{    /** *//**定时器事件队列*/    PriorityBlockingQueue<TimerSlot> queue_ =  new PriorityBlockingQueue<TimerSlot>(2048);    /** *//** Creates a new instance of TimerTask */    public TimerTask() ...{    }        /** *//**设置定时器,并放入队列*/    public synchronized Object setTimer(String taskname, String eventname, int timerevent, int delay, Object param)...{        TimerSlot slot = new TimerSlot();        slot.taskname = taskname;        slot.eventname = eventname;        slot.timerevent = timerevent;        slot.expiretime = System.currentTimeMillis() + delay;        slot.param = param;        try ...{            queue_.put(slot);        } catch (Exception ex) ...{        }        return 0;    }        /** *//**去掉指定的定时器*/    protected synchronized int killTimer(Object timer)...{        if (queue_.remove(timer))...{            return 0;        }        return -1;    }        /** *//**关闭操作*/    public void close()...{        queue_.clear();    }        /** *//**线程运行,检查定时器是否触发*/    public void run()...{        while (true)...{            try...{                TimerSlot slot = queue_.peek();                    if (slot == null) ...{                        Thread.sleep(50);                        continue;                    }                    long now = System.currentTimeMillis();                    if (now < slot.expiretime) ...{                        Thread.sleep(Math.min(slot.expiretime-now,50));                        continue;                    }                    queue_.remove();                                        TaskMsg taskmsg = new TaskMsg();                    taskmsg.eventName=slot.eventname;                    taskmsg.eventNo = slot.timerevent;                    taskmsg.msg = (slot.param);                    taskmsg.sender = "__timer";                    taskmsg.receiver = slot.taskname;                    TaskFactory.getInstance().getTaskByName(slot.taskname).                            putmsgtoqueue(taskmsg);            }catch(InterruptedException e)...{                return;            }        }    }        class TimerSlot implements java.lang.Comparable<TimerSlot>...{        public String eventname;        public String taskname;        public int timerevent;        public long expiretime; // ms, System.current+delay        public Object param;        public int compareTo(TimerSlot  other) ...{            return (int)(this.expiretime-other.expiretime);        }    }}  using System;public  class static main ( ){  public int arraySize=10;int a[arraySize]={23,32,12,11,13,35,465,542,16,1};for(int i=0;i<10;i++){  for(int j=0;j<10;j++ )if(a[j]>a[j++])  {  swap(&a[j],&a[j+1]);   }   public swap(int *ar1,int *ar2)  {    int hold=*ar1;      *ar1=*ar2;      *ar2=hold;  }   console.witeline("打印",a[j]);
阅读更多
想对作者说点什么? 我来说一句

Java心跳包功能实现

2015年11月18日 11KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭