读10w定时任务,如何高效触发超时 文章有感 源码
2017-03-20 00:00
274 查看
摘要: 10w定时任务,如何高效触发超时 源码
原文:
http://mp.weixin.qq.com/s/mvFwjgxliwx808Hn_9ruEA
58沈老师写的一个不错的思路
只有实现思路 没有代码 因此写出代码 不足之处 请大家指教
输出结果:
[时间:2017-03-20 03:04:33] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:34] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[]]
[时间:2017-03-20 03:04:35] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u123,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u456,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u789,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:37] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[]]
[时间:2017-03-20 03:04:38] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
[时间:2017-03-20 03:04:38] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u123,index:4]
[时间:2017-03-20 03:04:39] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:6,ele:[]]
[时间:2017-03-20 03:04:40] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:7,ele:[]]
[时间:2017-03-20 03:04:41] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:8,ele:[]]
[时间:2017-03-20 03:04:42] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:9,ele:[]]
[时间:2017-03-20 03:04:43] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:44] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[u789, u456]]
[时间:2017-03-20 03:04:44] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:超时了:[u789, u456]]
[时间:2017-03-20 03:04:45] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:46] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:47] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[u123]]
[时间:2017-03-20 03:04:47] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:超时了:[u123]]
[时间:2017-03-20 03:04:48] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
[时间:2017-03-20 03:04:49] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:6,ele:[]]
[时间:2017-03-20 03:04:50] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:7,ele:[]]
[时间:2017-03-20 03:04:51] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:8,ele:[]]
[时间:2017-03-20 03:04:52] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:9,ele:[]]
[时间:2017-03-20 03:04:53] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:54] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[]]
[时间:2017-03-20 03:04:55] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:56] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:57] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[]]
[时间:2017-03-20 03:04:58] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
原文:
http://mp.weixin.qq.com/s/mvFwjgxliwx808Hn_9ruEA
58沈老师写的一个不错的思路
只有实现思路 没有代码 因此写出代码 不足之处 请大家指教
package com.tst.timer; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HashWheelTimer { private final static Logger logger = LoggerFactory.getLogger(HashWheelTimer.class); private static AtomicInteger ai = new AtomicInteger(0); private static int size = 10; private static Map<String, Integer> map = new ConcurrentHashMap<>(); private static Set[] uidArr = new Set[size]; private ScheduledExecutorService pool = Executors.newScheduledThreadPool(1); private static Object lock=new Object(); public HashWheelTimer() { for (int i = 0; i < size; i++) { Set set = new HashSet(); uidArr[i]=set; } pool.scheduleAtFixedRate(new Runnable() { public void run() { int curIndex = ai.getAndIncrement()% size; synchronized (lock) { logger.info("curIndex:{},ele:{}", curIndex, uidArr[curIndex]); Set s = uidArr[curIndex]; if (s != null && s.size() > 0) { logger.info("超时了:{}", s); s.clear(); } } } }, 0, 1, TimeUnit.SECONDS); } public static void main(String[] args) { try { new HashWheelTimer(); Thread.sleep(3000); testArrive("u123"); testArrive("u456"); testArrive("u789"); Thread.sleep(2000); testArrive("u123"); } catch (Exception e) { } } private static void testArrive(String uid) { Integer index = map.get(uid); if (index == null) { index = uid.hashCode() % size; map.put(uid, index); } synchronized (lock) { Set s = uidArr[index]; s.remove(uid); int lastIndex = (ai.get()-2) % size; uidArr[lastIndex].add(uid); map.put(uid, lastIndex); logger.info("arrive,uid:{},index:{}", uid, lastIndex); } } }
输出结果:
[时间:2017-03-20 03:04:33] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:34] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[]]
[时间:2017-03-20 03:04:35] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u123,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u456,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u789,index:1]
[时间:2017-03-20 03:04:36] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:37] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[]]
[时间:2017-03-20 03:04:38] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
[时间:2017-03-20 03:04:38] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:arrive,uid:u123,index:4]
[时间:2017-03-20 03:04:39] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:6,ele:[]]
[时间:2017-03-20 03:04:40] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:7,ele:[]]
[时间:2017-03-20 03:04:41] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:8,ele:[]]
[时间:2017-03-20 03:04:42] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:9,ele:[]]
[时间:2017-03-20 03:04:43] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:44] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[u789, u456]]
[时间:2017-03-20 03:04:44] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:超时了:[u789, u456]]
[时间:2017-03-20 03:04:45] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:46] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:47] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[u123]]
[时间:2017-03-20 03:04:47] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:超时了:[u123]]
[时间:2017-03-20 03:04:48] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
[时间:2017-03-20 03:04:49] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:6,ele:[]]
[时间:2017-03-20 03:04:50] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:7,ele:[]]
[时间:2017-03-20 03:04:51] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:8,ele:[]]
[时间:2017-03-20 03:04:52] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:9,ele:[]]
[时间:2017-03-20 03:04:53] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:0,ele:[]]
[时间:2017-03-20 03:04:54] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:1,ele:[]]
[时间:2017-03-20 03:04:55] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:2,ele:[]]
[时间:2017-03-20 03:04:56] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:3,ele:[]]
[时间:2017-03-20 03:04:57] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:4,ele:[]]
[时间:2017-03-20 03:04:58] [级别:INFO] [类:com.tst.timer.HashWheelTimer] [消息:curIndex:5,ele:[]]
相关文章推荐
- 10w定时任务,如何高效触发超时
- 10w定时任务,如何高效触发超时
- [架构师之路]10w定时任务,如何高效触发超时 2017-03-09
- 10w定时任务,如何高效触发超时
- 10w定时任务,如何高效触发超时
- 10w定时任务,如何高效触发超时
- 10w定时任务,如何高效触发超时
- 10w定时任务,如何高效触发超时(58沈剑)
- 定时任务高效触发
- 定时任务高效触发
- 定时任务高效触发
- 【iOS沉思录】iOS中如何触发定时任务或延时任务?
- java框架源码之Quartz(1):定时任务如何调度
- C#如何在程序里定时启动任务
- C#如何在程序里定时启动任务(转)
- 如何创建程序文档使服务器定时运行某些任务
- 如何向OpenCMS中添加一个定时任务
- java如何做定时任务
- C#web中如何在程序里定时启动任务[转]
- 黄聪:解决wordpress定时发布文章失败”丢失计划任务”的插件