I have an application where I need to access a webservice every minute. I was going to use a thread for this, however if the user enters anything, the 'timer' needs to be delayed. I don't quite understand how to implement this in java

解决方案

Personally here is how I deal with it:

I declare 2 classes that will give you the functionality of function call after every given milliseconds.

In a new interface:

public interface TickListener {

public void tick();

public void tick(Exception e);

}

And in another class

public class TickManager {

public static final int STATE_TICK_ONCE = 0;

public static final int STATE_TICK_NONSTOP = 1;

public static final int STATE_TICK_NONE = 2;

int state, delay;

Thread t;

TickListener[] listeners;

long tickCount;

public TickManager(){

this(TickManager.STATE_TICK_NONE);

}

public TickManager(int state){

this(state,1000);

}

public TickManager(int state, int d){

this(state,d,null);

}

public TickManager(int state, int d, TickListener[] t){

this.state = state;

delay = d;

listeners = t;

tickCount=0;

if(state!=2){

startTicking(state);

}

}

public void startTicking(int s){

tickCount = 0;

state=s;

t = new Thread(new Runnable() {

@Override

public void run() {

while (state!=TickManager.STATE_TICK_NONE) {

tickCount++;

try {

Thread.sleep(delay);

} catch (Exception e) {

process(e);

stopTicking();

}

process();

if (state == TickManager.STATE_TICK_ONCE && tickCount == 1) {

stopTicking();

}

}

}

});

t.start();

}

public void process(){

if(listeners!=null){

for(TickListener l : listeners){

l.tick();

}

}

}

public void process(Exception e){

if(listeners!=null){

for(TickListener l : listeners){

l.tick(e);

}

}

}

public void stopTicking(){

state = TickManager.STATE_TICK_NONE;

t=null;

}

public int getState() {

return state;

}

public int getDelay() {

return delay;

}

public Thread getThread() {

return t;

}

public TickListener[] getListeners() {

return listeners;

}

public long getTickCount() {

return tickCount;

}

public void setState(int state) {

this.state = state;

}

public void setTickCount(long tickCount) {

this.tickCount = tickCount;

}

public void setDelay(int delay) {

this.delay = delay;

}

public void addTickListener(TickListener t){

if(listeners!=null){

int l = listeners.length;

TickListener[] tl = new TickListener[l+1];

System.arraycopy(listeners, 0, tl, 0, l);

tl[l] = t;

listeners=tl;

}

else{

listeners=new TickListener[1];

listeners[0]=t;

}

}

}

All you have to do is to create an object of TickManager, register a TickListener in it and call startTicking() on it. The delay is set via constructor also.

Just ensure that you do not change the delay time while it is ticking. It can be checked by calling getState() function and comparing it to the class constants. If it is, then you must stop it, change the delay and start it again.

简单的Java秒表计时器(线程),Java计时器使功能每分钟运行相关推荐

  1. java秒表_Java实现的计时器【秒表】功能示例

    Java实现的计时器[秒表]功能示例 发布时间:2020-08-31 04:44:58 来源:脚本之家 阅读:150 作者:不能吃的坚果 本文实例讲述了Java实现的计时器[秒表]功能.分享给大家供大 ...

  2. 请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能

    线程池: import java.util.linkedlist; public abstract class manager { private string mthreadpoolname = n ...

  3. java 获取所有线程,Java 实例 - 获取所有线程

    以下实例演示了如何使用 getName() 方法获取所有正在运行的线程: /* author by shouce.ren Main.java */ public class Main extends ...

  4. java 动态增加线程,java - 在Java中动态停止线程 - SO中文参考 - www.soinside.com

    我需要一些有关线程的帮助,我需要制作一个可以动态关闭和打开线程的程序(这意味着当我需要一个线程时,它将运行,如果不再需要它,它将停止),现在我的问题是?如果我仅终止该线程的run方法,将其计为线程停止 ...

  5. Java基础知识总结——java快速入门

    逢考必过,祝复习考试的你,顺利通过,B站账号@狼群里的小杨,记得点赞收藏加关注,一键三连哦! 第一章 知识点总结 1.java语言的主要贡献者是James Gosling 2.开发Java应用程序的基 ...

  6. 简单的Java秒表计时器(线程)

    秒表的个个位数的计算: package Seconds;public class Watch_time extends Thread{int ms,ms_1,ms_2;int s,s_1;int m, ...

  7. 简单的秒表计时器java报告_简单的Java秒表计时器(线程)

    秒表的个个位数的计算: package Seconds; public class Watch_time extends Thread{ int ms,ms_1,ms_2; int s,s_1; in ...

  8. java秒表计时器_Java实现的计时器【秒表】功能示例

    本文实例讲述了Java实现的计时器[秒表]功能.分享给大家供大家参考,具体如下: 应用名称:Java计时器 用到的知识:Java GUI编程 开发环境:win8+eclipse+jdk1.8 功能说明 ...

  9. java秒表计时器显示_Java实现的计时器【秒表】功能示例

    摘要:这篇Java开发技术栏目下的"Java实现的计时器[秒表]功能示例",介绍的技术点是"Java.计时器.计时.功能.实现.示例",希望对大家开发技术学习和 ...

最新文章

  1. 电子表单系列谈之表单数据处理
  2. 关于Two pointers的个人理解
  3. MyBatis总结六:resultMap详解(包含多表查询)
  4. ubuntu 设置开机执行脚本_Ubuntu 16.04设置rc.local开机启动命令/脚本的方法
  5. 信息学奥赛一本通 1026:空格分隔输出 | OpenJudge NOI 1.1 06
  6. 前端技术的概括以及html的基本知识总结
  7. JS截取字符串substr 和 substring方法的区别
  8. 一次FastDFS并发问题的排查经历
  9. 【ICLR2020】通过强化学习和稀疏奖励进行模仿学习
  10. 【OpenCV学习笔记】【编程实例】三(将一个图像中的指定区域拷贝到另一个图像的指定区域
  11. java面试宝典pdf,给大家安排上!
  12. Photoshop插件-黑白(三)-脚本开发-PS插件
  13. android游戏脚本开发工具,游戏脚本制作工具无需安卓
  14. 浏览器刷新和页面手动为什么不一样?
  15. LightOJ1336
  16. 移远UMTS LTE EVB Kit
  17. 【随笔】第一批走进大学的“00后”群体——纪念2015级西安交大少年班
  18. java 内存模型书籍_《深入理解 Java 内存模型》读书笔记
  19. 【“到此一游”系列】(菜鸡参加“美亚杯” 电子取证大赛感受)
  20. 颗粒粒径分析方法汇总

热门文章

  1. 切割 Tomcat 的 catalina.out 文件,解决日志文件过大的问题
  2. Android Studio导入Fresco
  3. 基于地图的工作流设计器,及基于地图的业务流程办理界面(二)
  4. golang 反射 reflect包 struct相互填充
  5. linux 用户空间文件系统 filesystem in userspace fuse 简介
  6. 区块链 智能合约 简介
  7. dos与ddos攻击原理
  8. linux diff patch 生成和打补丁
  9. markdown 画图
  10. python中@修饰符用法