Java中计时器的用法
来源:互联网 发布:高校大数据专业课程 编辑:程序博客网 时间:2024/05/29 16:45
利用计时器实现对象状态的检测
当对象在创建后,每隔一定的时间需要变化一次状态,并且该状态的变化还要通知到用户,可以利用Java的计时器实现对对象状态变化的监测。
举个例子,如种植了一颗植物,植物每隔两分钟需要变化一次状态,让后根据状态的不同通知客户端进行响应的事件处理。
植物生长状态
生长时间
客户端的处理
种子
2 分钟
显示植物的幼苗状态
幼苗
3 分钟
显示植物的成年状态
成熟
4 分钟
显示植物的成熟状态
收获
5分钟
提示用户收获该作物
articleID :植物ID
roleID:所属角色ID
currentState:植物的当前状态
timer:生长剩余时间
Java中计时器的用法:
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务.
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任务在指定的时间开始进行重复的固定速率执行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.
实现的源码:
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.mina.common.IoSession;
import com.toplx.mina.bussiness.handler.utils.ClientInforUtils;
public class Sacnning {
public static Boolean running = false;
public static void scanningProduct() {
Timer time = new Timer();
long delay = 50;
long period = 100;
// 开始执行计划任务
time.schedule(new TimerTask() {
// 检测服务器的控制流程
int k = 0;
public void run() {
System.out.println("开始打印 " + k + " 次");
k++;
running = true;
LinkedList<Product> list = ProductList.productList;
System.out.println(" 植物生长的链表长度为 " + list.size());
int size = list.size();
for (int i = 0; i < size; i++) {
Product product = list.getFirst();
Integer tempTime = product.getTimer();
System.out.println(" tempTime " + tempTime);
// 改变作物的时间
if (tempTime > 0) {
tempTime--;
product.setTimer(tempTime);
list.removeFirst();
list.addLast(product);
System.out.println(" 已经减--");
System.out.println(" 植物的当前状态 "+product.getCurrentState());
} else {
System.out.println(" 向客户端发送植物生长状态");
Integer currentState = product.getCurrentState();
IoSession session = ClientInforUtils.getSessionByID
.get(product.getRoleID());
System.out.println("--------------------"+product.getRoleID());
System.out.println("--------------------"+session);
switch (currentState) {
case 1:
product.setCurrentState(2);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
case 2:
product.setCurrentState(3);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
case 3:
product.setCurrentState(4);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
case 4:
product.setCurrentState(5);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
case 5:
product.setCurrentState(6);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
case 6:
product.setCurrentState(1);
product.setTimer(30);
list.addLast(product);
list.removeFirst();
notifyClient(session, product.getArticleID(),
product.getCurrentState());
break;
default:
break;
}
}
}
}
}, delay, period);
}
public static void notifyClient(IoSession session, Integer articleID,
Integer state) {
HashMap<String, Object> map;
switch (state) {
case 1:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
session.write(map);
break;
case 2:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
System.out.println(" 客户端地址 "+session);
session.write(map);
break;
case 3:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
session.write(map);
break;
case 4:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
session.write(map);
break;
case 5:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
session.write(map);
break;
case 6:
map = new HashMap<String, Object>();
map.put("Event", "S_Product_Grow");
map.put("productID", articleID);
map.put("state", state);
session.write(map);
break;
default:
break;
}
}
}
package com.toplx.mina.bussiness.handler.allhandlers.product.utils;
public class Product {
private Integer articleID;
private Integer roleID;
private Integer currentState;
private Integer timer;
public Product(Integer articleID, Integer roleID) {
this.articleID = articleID;
- Java中计时器的用法
- Java中计时器的使用
- Java中计时器的使用
- java计时器的几种用法
- c++中“计时器”、“sort”、“namespace”函数的用法
- Flash Timer的用法 计时器
- Android 计时器的简单用法
- 三种计时器的用法
- Java 计时器的实现
- Flex中Timer用法一例:计时器
- Android开发中Chronometer计时器用法问题
- centos中crontab(计时器)用法详解
- centos中crontab(计时器)用法详解
- Java计时器Timer和TimerTask用法
- Java计时器Timer和TimerTask用法
- VC中计时器的运用
- VC中计时器的运用
- VC++中计时器的运用
- 1111111111
- JAVASCRIPT弹出窗口大总结 (转)
- C++
- 关于GSP系统的权限(一)
- 转载PHP霸王版广告,挺搞笑的O(∩_∩)O哈哈哈~
- Java中计时器的用法
- 你不是菜鸟(6):我是应届,我该如何选择公司?
- 开心
- 斯蒂芬国会尽快离开
- java从服务器下载xls文件到客户端
- 从数据库中导出数据
- 分 享一下 ~
- 抽象
- 禁止右键菜单和选择复制