- 浏览: 370101 次
- 性别:
- 来自: 中国山东
文章分类
最新评论
-
ChinaEstone:
再举一个例子:RunnableImpl impl = new ...
这段代码执行任务时启动了几个线程? -
ChinaEstone:
只有一个timer的线程,以前理解的时候任务runable接口 ...
这段代码执行任务时启动了几个线程? -
nocb:
你好,请问有没有 darkstar的 ios android ...
SGS 0.9.7 协议解析 -
diyunpeng:
这个我得学习一下。
Linux下vi的用法 -
tantan:
mina 多并发实时传输,
只能建立一个连接传输,如何解决呢
...
深入理解Apache Mina (1)---- Mina的几个类
利用计时器实现对象状态的检测
当对象在创建后,每隔一定的时间需要变化一次状态,并且该状态的变化还要通知到用户,可以利用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;
<span s
发表评论
-
线性同余随机算法实现
2014-09-24 15:02 681package com.wistone.server.cor ... -
Java Pass By Value Example
2014-05-03 09:32 765package author.estone.java; ... -
How to use git in eclipse ?
2014-04-20 11:03 717when we use git in eclipse, w ... -
这段代码执行任务时启动了几个线程?
2013-08-07 10:16 1204import java.util.Timer; impor ... -
LookupError: unknown encoding 'ms936'
2013-08-05 12:42 1469Jython调用print方法,报错如下LookupErr ... -
Nginx反向代理不跳转(nginx/java/tomcat/jsp)
2013-03-19 17:48 3400<% String path = request.g ... -
Eclipse Indigo Maven SCM SVN
2012-12-20 23:06 1079Following these steps: 1) Ins ... -
驼峰格式和下划线格式字符串相互转换
2012-11-21 11:57 3581/** * @param strs * ... -
延迟5s的另外一种写法
2012-08-07 14:24 770int seconds = 5; l ... -
Use CodeMoel Generate Java Source Code
2012-06-06 20:21 1665package samples; // Example: ... -
找jar的两个网站
2012-05-26 02:00 784finjar.com docjar.com -
Tomcat开启JMX功能
2011-11-15 00:20 1399使用Jconsole或者VisualVM监控Tomcat的JV ... -
RSA对文件进行加密和解密
2011-03-31 16:39 1860package author.estone.rsa; i ... -
Facebook中FBML和IFrame的工作原理
2010-05-19 11:52 3284在Canvas Page中,用户创建的应用需要使用facebo ... -
数据库为什么要添加连接池
2010-03-03 16:55 1542今天在学习kauklahti的时 ... -
分析使用Jdbc连接数据库时用到的对象
2010-03-03 16:54 1133先看有上文给出的一个连接msyql的Jdbc的源码。 //- ... -
一行“神奇”的代码
2010-02-02 15:15 939最近在复习闫宏的 ... -
老生常谈--return和Collection中的回值问题
2010-01-25 17:35 0关于return返回值的问题和Collection中存放引用的 ... -
Pushlet--Web Comet FrameWork
2010-01-06 10:51 1096Server-side notification to b ... -
一个Tomcat中文文档网站
2009-12-21 15:13 2744这里有中文版的Tomcat的文档http://www.jaxm ...
相关推荐
Java 倒计时器代码详解 ...Java 倒计时器代码是一个简单的倒计时器程序,使用 Java 语言编写,能够实现倒计时的功能。该程序使用了 Java 的图形用户界面编程和多线程编程技术,能够满足用户的需求。
Java Swing计时器是Java图形用户界面(GUI)开发中的一种常见组件,它允许开发者创建交互式的定时功能,如倒计时或者周期性任务。在本项目中,我们有一个已经打包好的jar文件,名为"TimerCount",这代表它是一个实现...
Java计时器(Timer)是Java Swing库中的一个组件,用于调度周期性的任务或执行一次性的延迟任务。在这个经典例子中,我们将会探讨如何利用Java计时器来实现每3秒在控制台上打印当前时间的功能。这个功能对于理解Java...
总的来说,"倒计时器 Java"是一个很好的实践项目,它涉及到了Java GUI编程中的多个核心概念,对于初学者来说是一次宝贵的学习经验。通过研究这个程序,不仅可以掌握Java基础知识,还能了解如何设计用户友好的界面并...
在JAVA中,倒计时器的实现通常依赖于`java.util.Timer`类和`java.util.TimerTask`类。`Timer`类用于创建定时任务,而`TimerTask`则用于定义具体的任务内容,例如更新倒计时显示。下面我们将深入探讨这些关键知识点:...
计时器的使用非常简单,只需要创建一个 Timer 实例,然后使用 schedule() 方法计划一个 TimerTask。 GregorianCalendar 的用法 GregorianCalendar 是 Java 中的一个日历类,用于计算日期和时间。它可以用于计划...
Java计时器是编程中一个常见且实用的工具,它可以帮助开发者在程序中精确地控制时间,例如跟踪任务执行的时间、实现定时任务等。在这个基于Java编写的计时器项目中,我们关注的是手动设置起始和终止时间的简单实现,...
在Java编程语言中,创建一个倒计时器是一项常见的任务,尤其在开发各种计时类应用或游戏时。本项目实现了一个完整的倒计时功能,包括输入倒计时时间、实时显示剩余时间以及时间到达后的通知机制。在这个系统中,没有...
Java计时器是Java编程中一个非常实用的工具,它允许开发者在程序中实现时间相关的功能,例如定时执行任务、测量代码执行时间等。在Java中,我们可以使用多种方式来创建计时器,如java.util.Timer类和java.util....
Java计时器是Java Swing库中的一个重要组件,用于在用户界面中实现定时任务或计时功能。`javax.swing.Timer` 类提供了简单的方式来周期性地触发事件,这些事件通常用于更新UI或其他需要定时执行的任务。在提供的代码...
Java计时器是Java编程语言中用于实现定时任务和调度任务的重要工具,它允许程序员设置时间间隔执行特定的代码块。在Java中,我们可以使用`java.util.Timer`类和`java.util.TimerTask`类来创建和管理计时器。下面我们...
根据提供的代码片段,我们可以看到三种不同的计时器实现方法:使用`java.util.Date`、`System.currentTimeMillis()`以及`System.nanoTime()`。下面将分别介绍这三种方法的特点和应用场景。 #### 三、使用`java.util...
这款计时器的实现基于Java编程语言,Java是一种广泛使用的面向对象的编程语言,以其跨平台的特性而闻名。在Java中,计时功能通常通过`java.util.Timer`类或者`java.time`包中的类来实现。在这个特定的应用中,可能...
这里提到的“java倒计时”项目包含了两个Java类,它们可能实现了一个简单的倒计时器功能。在Java中,我们可以使用`java.util.Timer`和`java.util.TimerTask`这两个类来实现倒计时逻辑。 `java.util.Timer`是一个...
在这个方法中,编写你希望定时执行的代码。例如,你可以在这里更新游戏状态或显示计时信息。 ```java public class MyTask extends TimerTask { @Override public void run() { // 这里放置需要定时执行的代码 ...
因此,记得在Activity的`onPause()`或`onDestroy()`方法中取消计时器。 6. **最佳实践**:在实际开发中,为了提高代码的可读性和可维护性,建议将计时器逻辑封装在一个单独的类中,这样可以更好地控制计时器的生命...
Java 计时器 Timer 和 TimerTask 用法总结 Java 中的计时器(Timer)和 TimerTask 是一种常用的延迟执行技术,用于实现延迟执行某个任务或事件。下面将详细介绍 Timer 和 TimerTask 的用法和实现原理。 Timer ...
Java 计时器小程序是一种基于 Java 编程语言开发的应用,旨在提供一个简易计时工具,用户可以在没有实体计时器的情况下使用它来追踪时间。这个小程序具备计时、暂停、重置、记录和清除记录的功能,适用于各种需要...