java定时器 多线程_Java多线程 定时器
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多线程 定时器相关推荐
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- java 线程简介_java多线程介绍
java多线程介绍 多线程的基本实现 进程指运行中的程序,每个进程都会分配一个内存空间,一个进程中存在多个线程,启动一个JAVA虚拟机,就是打开个一个进程,一个进程有多个线程,当多个线程同时进行,就叫 ...
- java第五章 多线程_java多线程编程核心技术——第五章总结
定时器Timer的使用 在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务. Timer类的主要作用是设置计划任务,但封装任务的类却是TimerTask类. 执行计划任 ...
- java闭合数据_java多线程中线程封闭详解
线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...
- java线程 打印_java多线程实现 5秒一次打印当前时间
import javax.swing.JLabel; import java.util.Date; public class Time extends JFrame implements Runnab ...
- java futher多线程_Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括: ConcurrentSkipListMap介绍 ConcurrentS ...
- java mina多线程_Java多线程基础总结九:Mina窥探(1)
一直以来的多线程的基础总结都是脱离应用的,但是要说多线程的应用就不能不说Mina.Apache Mina作为一个高性能的Java异步并发网 络通讯框架,其内部的多线程的设计和实现可谓是学习多线程的良药 ...
- java 锁竞争_Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生"竞争条件"的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作 ...
- java 禁止使用多线程_Java多线程(四)-线程状态的转换 - Java 技术驿站-Java 技术驿站...
一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法 ...
- java线程 教程_Java多线程系列教程
Java多线程系列教程 多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容是对Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), n ...
最新文章
- 国产期刊崛起!上海大学、郑州大学主办期刊IF超15,2021版SCI期刊影响因子出炉...
- 写程序时如何使用日志
- Windows 10 系统版本更新历史
- xxx cannot be resolved to a type 错误解决方法
- porphet论文_时间序列模型Prophet使用详细讲解
- C语言--关于指针两种初始化赋值操作
- 创造与魔法最新服务器怎么进,创造与魔法进不了服务器 | 手游网游页游攻略大全...
- python networkx学习
- Kali linux 渗透测试(五)——渗透WPS攻击
- 电子商务之部分名词解释
- java实现 GB35114 sip AuthorizationHeader遇到的一个小坑
- eXtremeComponents 使用总结
- hobbits.me+霍比特+php,霍比特人:意外之旅(MP3+中英字幕) 第24期:飞贼霍比特人
- python查询12306余票_python命令行查询12306火车票
- 占书明:win7系统微信突然提示“微信运行错误:当前版本需在windows xp sp3以上系统运行,请安装可用版本或升级系统。点击确认下载安装可用版本”。
- 【图像去模糊】SDWNet: A Straight Dilated Network with Wavelet Transformation for image Deblurring
- 计算机准备打印却没动静,打印机显示正在打印但是没反应怎么办?
- python笔迹识别_笔迹鉴别(1) —— 实现步骤概述
- 【k8s】Unable to restart cluster, will reset it: apiserver healthz异常
- Zotero+OneDrive多平台在线同步完美解决方案(一):安装配置、云端同步文献数据