1. 程式人生 > >心跳包定時器實現(Timer和TimerTask詳解)

心跳包定時器實現(Timer和TimerTask詳解)

如果要執行一些簡單的定時器任務,無須做複雜的控制,也無須儲存狀態,那麼可以考慮使用JDK 入門級的定期器Timer來執行重複任務。

一、原理

JDK中,定時器任務的執行需要兩個基本的類:
java.util.Timer;
java.util.TimerTask;

要執行一個定時任務,最基本的步驟如下:
1、建立一個要執行的任務TimerTask。
2、建立一個Timer例項,通過Timer提供的schedule()方法,將 TimerTask加入到定時器Timer中,同時設定執行的規則即可。

當程式執行了Timer初始化程式碼後,Timer定時任務就會按照設定去執行。

Timer中的schedule()方法是有多種過載格式的,以適應不同的情況。該方法的格式如下:

void schedule(TimerTask task, Date time)
安排在指定的時間執行指定的任務。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任務在指定的時間開始進行重複的固定延遲執行。
void schedule(TimerTask task, long delay)
安排在指定延遲後執行指定的任務。
void schedule(TimerTask task, long delay, long period)
安排指定的任務從指定的延遲後開始進行重複的固定延遲執行。

Timer是執行緒安全的,此類可擴充套件到大量同時安排的任務(存在數千個都沒有問題)。其所有構造方法都啟動計時器執行緒。可以呼叫cancel() 終止此計時器,丟棄所有當前已安排的任務。purge()從此計時器的任務佇列中移除所有已取消的任務。此類不提供實時保證:它使用 Object.wait(long) 方法來安排任務。


TimerTask是一個抽象類,由 Timer 安排為一次執行或重複執行的任務。它有一個抽象方法run()----計時器任務要執行的操作。因此,每個具體的任務類都必須繼承TimerTask類,並且重寫run()方法。另外它還有兩個非抽象的方法:
boolean cancel()
取消此計時器任務。
long scheduledExecutionTime()
返回此任務最近實際 執行的安排 執行時間。

二、例子


下面用Timer實現一個簡單例子:

?
12345678910111213141516171819202122232425<span style="font-family:FangSong_GB2312;font-size:18px;"
><span style="font-size:24px;"

相關推薦

心跳定時實現TimerTimerTask

如果要執行一些簡單的定時器任務,無須做複雜的控制,也無須儲存狀態,那麼可以考慮使用JDK 入門級的定期器Timer來執行重複任務。一、原理JDK中,定時器任務的執行需要兩個基本的類:java.util.Timer;java.util.TimerTask;要執行一個定時任務,最

基於連結串列的軟體定時實現

軟體定時器在實際應用比較重要,本文旨在實現一種便於移植,易擴充套件功能,效率高的軟體定時器。本定時器是基於排序連結串列,將最近將觸發的定時器置於連結串列頭,後續新增定時器將計算出其合適位置插入。 主要資料結構及資料   typedef struct m_tm_tcb_struct { uint

SpringBoot (六) :SpringBoot定時實現簡單入門

說在前面 定時任務一般會存在中大型企業級專案中,為了減少伺服器、資料庫的壓力往往會採用時間段性的去完成某些業務邏輯。比較常見的就是金融服務系統推送回調,一般支付系統訂單在沒有收到成功的回撥返回內容時會持續性的回撥,這種回撥一般都是定時任務來完成的。 Spri

群聊實現tcp多執行緒

服務端程式碼 package com.cyj.tcp.chat2; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import ja

umeng友盟實現第三方登入分享之登入

一、簡單介紹 因為一個平臺一個平臺進行弄太麻煩,也不夠統一,所以領導選擇了umeng(我的內心是拒絕的),umeng的文件寫的便於查詢,但是比較分散,對於比較熟悉的很好用,沒接觸過umeng的肯定一臉懵逼,比如我,所以,我整理一篇,以後也好用到。 本文以6.

第一次面試java 中equal==的

        今天去了方正國際軟體有限公司面試,第一次面試,面試之後的唯一想做的就是把基礎打好。來看看筆試的第一題 Long a1=128L; Long a2=128L; Long a3=127L; Long a4=127L; Sy

c語言實現漢諾塔程式執行步驟

很久沒去接觸c語言了,今天翻了翻c語言的書,偶然間看到了大一時讓我鬱悶了很久的漢諾塔問題,又重新推理了一遍,漢諾塔的實現採用遞迴演算法,涉及到資料結構中的棧的知識。下面是c實現漢諾塔的原始碼。程式只是實現了文字資訊,即用文字描述了圓盤的移動過程,並未真正實現圓盤的移動,該程式

Java實現檔案寫入——IO流輸入輸出流

輸入輸出的重要性:      輸入和輸出功能是Java對程式處理資料能力的提高,Java以流的形式處理資料。流是一組有序的資料序列,根據操作的型別,分為輸入流和輸出流。      程式從輸入流讀取資料,向輸出流寫入資料。Java是面向物件的程式語言,每一個數

阿裏雲服務安裝postfix--郵箱服務排坑過程

ebe ipv6協議 oss 獲得 是否 smt mage 參考 協議類型 一、郵件服務需求 在實際生產環境中,我們的服務器難免會發生故障,這時候就需要有郵件通知運維人員,及時查出問題,解決問題。所以郵件服務在生產中有著不可或缺的作用! 二、操作環境 操作系統:Cen

微享商盟消費返利小程序系統開發 程序制作

服務 系統 app 小程序 代碼 源碼 好用的同時總是少不了一些坑,或許我是才接觸沒多久的緣故吧! 1.resttemplate fastjson替換jackson fastjson是國人的驕傲,符合國人的使用習慣。 微享商盟消費返利小程序系統

LINUX6——DNS域名解析服務搭建正向解析新手

訪問 端口 模式 兩個 搭建 保存 color dom mail LINUX6——DNS域名解析服務搭建(正向解析新手詳解) -------------------------------概述------------------------------ DNS TC

吳恩達機器學習課程筆記02——處理房價預測問題梯度下降演算法

  建議記住的實用符號 符號 含義 m 樣本數目 x 輸入變數 y 輸出變數/目標變數

八皇後問題遞歸方法

span isp als using ostream 開始 int 對角線 沒有 八皇後遞歸詳解 核心代碼如下: //八皇後遞歸解法 #include<iostream> using namespace std; int queen[9] = {-1,-1

Nginx 性能優化配置文件

pro linux cti size 長時間 並發連接 poll ipv4 服務器端 隨著訪問量的不斷增加,需要對 Nginx 和內核做相應的優化來滿足高並發用戶的訪問,那下面在單臺 Nginx 服務器來優化相關參數。 Nginx.conf 配置優化: worker_

opencv-python 的Camshift函式附逐行

這是我在OpenCV-python教程中找到的程式碼並附上的詳解 import cv2 import numpy as np cap = cv2.VideoCapture(0) # ret判斷是否讀到圖片 # frame讀取到的當前幀的矩陣 # 返回的是元組型別,所以

Subspace Clustering附帶CLIQUE演算法

Subspace Clustering詳解 第二十四次寫部落格,本人數學基礎不是太好,如果有幸能得到讀者指正,感激不盡,希望能借此機會向大家學習。這一篇作為密度聚類演算法族的第三篇,主要是介紹一種用來發現子空間中的簇的演算法——Subspace Cluster

深度學習 --- 卷積神經網路CNNLeNet-5網路

卷積神經網路(Convolutional Neural Network,CNN)是一種前饋型的神經網路,其在大型影象處理方面有出色的表現,目前已經被大範圍使用到影象分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的引數相對較少,使的其能夠廣泛應用。 本節打算先介紹背景和簡單的基本

演算法提高快速冪快速冪演算法

問題描述   給定A, B, P,求(A^B) mod P。 輸入格式   輸入共一行。   第一行有三個數,N, M, P。 輸出格式   輸出共一行,表示所求。 樣例輸入 2 5 3 樣例輸出 2 資料規模和約定   共10組資料   對100%的資料,A, B為lon

Python3爬蟲學習筆記1.urllib庫

1.什麼是爬蟲:略,到處都有講解。 雖然是入門,不過沒有Python基礎的同學看起來可能費勁,建議稍學下Python 之前學習前端知識也是為了能看懂HTML,便於爬蟲學習,建議瞭解下前端知識 2.re

K-th Number POJ - 2104 主席樹 學習

https://cn.vjudge.net/problem/POJ-2104 題意 給你N個數 嗎、M次查詢,每次查詢給你 IJK 問第I個數到第J個數中第K大 思路 字典樹,每新增一個數都建立一棵線段樹,J和I 做減法就可以的到這個區間的線段樹 #include <c