`

Java中计时器的用法

阅读更多

利用计时器实现对象状态检测

当对象在创建后,每隔一定的时间需要变化一次状态,并且该状态的变化还要通知到用户,可以利用Java的计时器实现对对象状态变化的监测。

举个例子,如种植了一颗植物,植物每隔两分钟需要变化一次状态,让后根据状态的不同通知客户端进行响应的事件处理。

植物生长状态

生长时间

客户端的处理

种子

分钟

显示植物的幼苗状态

幼苗

分钟

显示植物的成年状态

成熟

分钟

显示植物的成熟状态

收获

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

  • 大小: 82 KB
  • 大小: 82 KB
分享到:
评论

相关推荐

    java倒计时器代码

    Java 倒计时器代码详解 ...Java 倒计时器代码是一个简单的倒计时器程序,使用 Java 语言编写,能够实现倒计时的功能。该程序使用了 Java 的图形用户界面编程和多线程编程技术,能够满足用户的需求。

    java swing计时器

    Java Swing计时器是Java图形用户界面(GUI)开发中的一种常见组件,它允许开发者创建交互式的定时功能,如倒计时或者周期性任务。在本项目中,我们有一个已经打包好的jar文件,名为"TimerCount",这代表它是一个实现...

    java计时器经典例子

    Java计时器(Timer)是Java Swing库中的一个组件,用于调度周期性的任务或执行一次性的延迟任务。在这个经典例子中,我们将会探讨如何利用Java计时器来实现每3秒在控制台上打印当前时间的功能。这个功能对于理解Java...

    倒计时器 java

    总的来说,"倒计时器 Java"是一个很好的实践项目,它涉及到了Java GUI编程中的多个核心概念,对于初学者来说是一次宝贵的学习经验。通过研究这个程序,不仅可以掌握Java基础知识,还能了解如何设计用户友好的界面并...

    JAVA倒计时器

    在JAVA中,倒计时器的实现通常依赖于`java.util.Timer`类和`java.util.TimerTask`类。`Timer`类用于创建定时任务,而`TimerTask`则用于定义具体的任务内容,例如更新倒计时显示。下面我们将深入探讨这些关键知识点:...

    java 计时器

    计时器的使用非常简单,只需要创建一个 Timer 实例,然后使用 schedule() 方法计划一个 TimerTask。 GregorianCalendar 的用法 GregorianCalendar 是 Java 中的一个日历类,用于计算日期和时间。它可以用于计划...

    java写的计时器

    Java计时器是编程中一个常见且实用的工具,它可以帮助开发者在程序中精确地控制时间,例如跟踪任务执行的时间、实现定时任务等。在这个基于Java编写的计时器项目中,我们关注的是手动设置起始和终止时间的简单实现,...

    java倒计时器

    在Java编程语言中,创建一个倒计时器是一项常见的任务,尤其在开发各种计时类应用或游戏时。本项目实现了一个完整的倒计时功能,包括输入倒计时时间、实时显示剩余时间以及时间到达后的通知机制。在这个系统中,没有...

    Java计时器

    Java计时器是Java编程中一个非常实用的工具,它允许开发者在程序中实现时间相关的功能,例如定时执行任务、测量代码执行时间等。在Java中,我们可以使用多种方式来创建计时器,如java.util.Timer类和java.util....

    Java计时器[文].pdf

    Java计时器是Java Swing库中的一个重要组件,用于在用户界面中实现定时任务或计时功能。`javax.swing.Timer` 类提供了简单的方式来周期性地触发事件,这些事件通常用于更新UI或其他需要定时执行的任务。在提供的代码...

    java计时器代码 可以z在Eclipse下直接运行

    Java计时器是Java编程语言中用于实现定时任务和调度任务的重要工具,它允许程序员设置时间间隔执行特定的代码块。在Java中,我们可以使用`java.util.Timer`类和`java.util.TimerTask`类来创建和管理计时器。下面我们...

    用java编写的计时器

    根据提供的代码片段,我们可以看到三种不同的计时器实现方法:使用`java.util.Date`、`System.currentTimeMillis()`以及`System.nanoTime()`。下面将分别介绍这三种方法的特点和应用场景。 #### 三、使用`java.util...

    java文字记忆毫秒计时器

    这款计时器的实现基于Java编程语言,Java是一种广泛使用的面向对象的编程语言,以其跨平台的特性而闻名。在Java中,计时功能通常通过`java.util.Timer`类或者`java.time`包中的类来实现。在这个特定的应用中,可能...

    java倒计时

    这里提到的“java倒计时”项目包含了两个Java类,它们可能实现了一个简单的倒计时器功能。在Java中,我们可以使用`java.util.Timer`和`java.util.TimerTask`这两个类来实现倒计时逻辑。 `java.util.Timer`是一个...

    timeclck.rar_timer java_计时器_计时器代码

    在这个方法中,编写你希望定时执行的代码。例如,你可以在这里更新游戏状态或显示计时信息。 ```java public class MyTask extends TimerTask { @Override public void run() { // 这里放置需要定时执行的代码 ...

    Android简单的计时器源码

    因此,记得在Activity的`onPause()`或`onDestroy()`方法中取消计时器。 6. **最佳实践**:在实际开发中,为了提高代码的可读性和可维护性,建议将计时器逻辑封装在一个单独的类中,这样可以更好地控制计时器的生命...

    Java计时器Timer和TimerTask用法总结

    Java 计时器 Timer 和 TimerTask 用法总结 Java 中的计时器(Timer)和 TimerTask 是一种常用的延迟执行技术,用于实现延迟执行某个任务或事件。下面将详细介绍 Timer 和 TimerTask 的用法和实现原理。 Timer ...

    java——计时器小程序

    Java 计时器小程序是一种基于 Java 编程语言开发的应用,旨在提供一个简易计时工具,用户可以在没有实体计时器的情况下使用它来追踪时间。这个小程序具备计时、暂停、重置、记录和清除记录的功能,适用于各种需要...

Global site tag (gtag.js) - Google Analytics