이 글은 주로 자바에서 타이머에 관한 몇 가지 이슈를 예시로 소개하고 있습니다. 도움이 필요한 친구는
타이머 이슈
를 참고하면 됩니다. 타이머의 기본 구성 요소입니다. 사용자 공간이든 커널 공간에서의 프로그램 개발이든 타이머는 기본 구성 요소로서의 지원이 필요한 경우가 많습니다. 타이머 구현에는 타이머 추가, 타이머 취소, 타이머 확인, 만료 실행이라는 네 가지 기본 동작이 필요합니다.
타이머를 설계하고 다음 세 가지 기본 동작을 구현하십시오. 함수 프로토타입이 제공되어 있으므로 모든 프로그래밍 언어를 사용하여 데이터 구조 및 구현을 설계할 수 있으며 다음과 같이 많은 수의 타이머를 지원할 수 있습니다.
// 타이머 추가: 특정 시간 간격 후에 대상 작업을 수행합니다.
// 입력 1: 간격 타이머 시간, 단위 ms
/ / 입력 2: ExpiryAction 대상 연산
// 반환: TimerId
StartTimer(Interval, ExpiryAction) -> >
// 타이머 취소
// 입력: 타이머 ID
StopTimer(TimerId)
// 타이머 확인
// 시스템은 이 함수를 10ms마다 호출합니다.
PerTickBookkeeping()
더 이상 고민하지 않고 바로 코드로 들어가겠습니다.
import java.util.ArrayList;
public class Timer {
private long interval; // 定时器时间,单位 ms
private String expiryAction; // 目标操作
private int timerId; // 定时器Id
private long waitTime; // 定时器等待时间
// 构造函数
public Timer(){
this.waitTime = 0;
}
// 添加定时器
public int StartTimer(long interval, String expiryAction, int id){
this.interval = interval;
this.expiryAction = expiryAction;
this.timerId = id;
return timerId;
}
// 取消定时器
public void StopTimer(int timerId, ArrayList<Timer> timer){
timer.remove(timerId);
}
// 定时器检查
public void PerTickBookkeeping(){
if (this.interval > this.waitTime)
this.waitTime += 10;
else{
System.out.println("定时器"+this.timerId+":"+this.expiryAction);
this.waitTime = 0;
}
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
this.interval = interval;
}
public String getExpiryAction() {
return expiryAction;
}
public void setExpiryAction(String expiryAction) {
this.expiryAction = expiryAction;
}
public int getTimerId() {
return timerId;
}
public void setTimerId(int timerId) {
this.timerId = timerId;
}
public long getWaitTime() {
return waitTime;
}
public void setWaitTime(long waitTime) {
this.waitTime = waitTime;
}
}
import java.util.ArrayList;
import java.util.Iterator;
public class DoTimer extends Thread {
private static ArrayList<Timer> timerList;
public static void main(String[] args){
timerList = new ArrayList<Timer>();
Timer timer1 = new Timer();
timer1.StartTimer(3000, "我是第一个定时器,等待3秒", 0);
Timer timer2 = new Timer();
timer2.StartTimer(4000, "我是第二个定时器,等待4秒", 1);
timerList.add(timer1);
timerList.add(timer2);
//public void run(){}
new Thread(){
@Override
public void run() {
while(true){
Iterator<Timer> it = timerList.iterator();
while(it.hasNext()){
it.next().PerTickBookkeeping();
}
try {
sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
timer1.StopTimer(timer1.getTimerId(), timerList);
}
}
위 내용은 Java 타이머 문제 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!