Java多线程中的定时器(java.util.Timer)有定时执行任务的功能,通过设定定时器的间隔时间,会自动在此间隔后执行预先安排好的任务(java.util.TimerTask)。

timer.schedule(TimerTask,delay,interval time)

第一个参数是需要执行的任务。此类的类型为java.util.TimerTask。第二个参数是执行任务前等待时间,第三个参数是间隔时间(单位为毫秒)

package timer;

import java.util.concurrent.PriorityBlockingQueue;

public class MyTimer {

PriorityBlockingQueuequeue = new PriorityBlockingQueue<>();

Worker worker;

private static class Worker extends Thread {

PriorityBlockingQueuequeue;

Worker(PriorityBlockingQueuequeue) {

this.queue = queue;

}

@Override

public void run() {

while (true) {

try {

MyTimerTask task = queue.take();

long current = System.currentTimeMillis();

if (task.delay <= current) {

task.target.run();

} else {

queue.put(task);

Thread.sleep(task.delay - current);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

MyTimer() {

worker = new Worker(queue);

worker.start();

}

void execute(Runnable target, long delay) {

queue.put(new MyTimerTask(target, delay));

}

public static void main(String[] args) {

MyTimer timer = new MyTimer();

timer.execute(new Runnable() {

@Override

public void run() {

System.out.println("该起床了");

}

}, 2000);

System.out.println("另一个人");

}

}

package timer;

public class MyTimerTask implements Comparable{

Runnable target;

long delay;

MyTimerTask(Runnable target, long delay) {

this.target = target;

this.delay = System.currentTimeMillis() + delay;//延时后的时刻

}

@Override

public int compareTo(MyTimerTask o) {

if (delay == o.delay) {

//延时后的时刻

return 0;

} else if (delay < o.delay) {

return -1;

} else {

return 1;

}

}

}

java定时器 多线程_Java多线程 定时器相关推荐

  1. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  2. java 线程简介_java多线程介绍

    java多线程介绍 多线程的基本实现 进程指运行中的程序,每个进程都会分配一个内存空间,一个进程中存在多个线程,启动一个JAVA虚拟机,就是打开个一个进程,一个进程有多个线程,当多个线程同时进行,就叫 ...

  3. java第五章 多线程_java多线程编程核心技术——第五章总结

    定时器Timer的使用 在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务. Timer类的主要作用是设置计划任务,但封装任务的类却是TimerTask类. 执行计划任 ...

  4. java闭合数据_java多线程中线程封闭详解

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  5. java线程 打印_java多线程实现 5秒一次打印当前时间

    import javax.swing.JLabel; import java.util.Date; public class Time extends JFrame implements Runnab ...

  6. java futher多线程_Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括: ConcurrentSkipListMap介绍 ConcurrentS ...

  7. java mina多线程_Java多线程基础总结九:Mina窥探(1)

    一直以来的多线程的基础总结都是脱离应用的,但是要说多线程的应用就不能不说Mina.Apache Mina作为一个高性能的Java异步并发网 络通讯框架,其内部的多线程的设计和实现可谓是学习多线程的良药 ...

  8. java 锁竞争_Java多线程中的竞争条件、锁以及同步的概念

    竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生"竞争条件"的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作 ...

  9. java 禁止使用多线程_Java多线程(四)-线程状态的转换 - Java 技术驿站-Java 技术驿站...

    一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法 ...

  10. java线程 教程_Java多线程系列教程

    Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...

最新文章

  1. 国产期刊崛起!上海大学、郑州大学主办期刊IF超15,2021版SCI期刊影响因子出炉...
  2. 写程序时如何使用日志
  3. Windows 10 系统版本更新历史
  4. xxx cannot be resolved to a type 错误解决方法
  5. porphet论文_时间序列模型Prophet使用详细讲解
  6. C语言--关于指针两种初始化赋值操作
  7. 创造与魔法最新服务器怎么进,创造与魔法进不了服务器 | 手游网游页游攻略大全...
  8. python networkx学习
  9. Kali linux 渗透测试(五)——渗透WPS攻击
  10. 电子商务之部分名词解释
  11. java实现 GB35114 sip AuthorizationHeader遇到的一个小坑
  12. eXtremeComponents 使用总结
  13. hobbits.me+霍比特+php,霍比特人:意外之旅(MP3+中英字幕) 第24期:飞贼霍比特人
  14. python查询12306余票_python命令行查询12306火车票
  15. 占书明:win7系统微信突然提示“微信运行错误:当前版本需在windows xp sp3以上系统运行,请安装可用版本或升级系统。点击确认下载安装可用版本”。
  16. 【图像去模糊】SDWNet: A Straight Dilated Network with Wavelet Transformation for image Deblurring
  17. 计算机准备打印却没动静,打印机显示正在打印但是没反应怎么办?
  18. python笔迹识别_笔迹鉴别(1) —— 实现步骤概述
  19. 【k8s】Unable to restart cluster, will reset it: apiserver healthz异常
  20. Zotero+OneDrive多平台在线同步完美解决方案(一):安装配置、云端同步文献数据

热门文章

  1. 【Qt开发】关于QWSServer
  2. 译:Datetime类型的扩展
  3. Eclipse SQL Explorer
  4. 并发编程学习之阻塞队列ArrayBlockingQueue
  5. Oracle查询优化改写技巧与案例总结三
  6. 兄dei,你的代码死循环了吗?
  7. Spring整合MyBatis之SqlSession对象的产生
  8. 订阅github release(官方+IFTTT)
  9. element-UI快速上手例子运行失败
  10. HADOOP再进阶:本地Yum软件源安装Cloudera Manager 5