JAVA不会被夯住的轻量级timer定时任务
【线上大量使用了6年的源码】我们实际环境中,绝大多数的定时任务都是一个简单的thread+while(true)就够了。
但偏偏的,在很长期运行中(一个、几个月),任务里的代码就会被莫名其妙的阻塞(即使你设置了超时)。
使的你不得不上 很重的定时线程池或者任务框架。
我这个就是几行代码解决此问题。
MonitorManager.startOneThread("demo1", new Runnable() {
@Override
public void run() {
System.out.println("定时任务执行->Kiss me more->" + TimeUtil.format(System.currentTimeMillis(), "HH:mm:ss"));
try {
Thread.sleep(模拟run方法阻塞);
} catch (InterruptedException e) {
throw new RuntimeException("收到中断,停止线程!!");
}
}
}, 2000, 2000, 10000);
运行结果:
2025-12-02 16:56:51,605 [ERROR]MonitorManager(109) 启动name=demo1的任务线程..
设置定时任务:2000ms后运行,每2000ms执行一次,超时检测10000ms
任务执行->Kiss me more->16:56:53
任务执行->Kiss me more->16:56:57
模拟阻塞 20000ms
2025-12-02 16:57:21,612 [ERROR]MonitorManager(63) 检测到有1个任务线程被夯住,即将对它们重起...
写不下了。。。
JSTL-Core标签库.pdf
网上搜集的,然后自己整理了一下。
JSTL-Core标签库.pdf
自己写的实用JAVA读配置文件专用工具包
工作中自己封装的实用工具包。
分打包jar文件和源代码及使用说明。
此代码虽然不很复杂,但是这种程序结构和思想对普通程序员是有帮助的。
实现了缓存,只会对硬盘读一次。
其中的FileUtil是以前在网上找的。
JAVA服务端访问量与响应时间统计工具 与 过载保护工具
这个代码如果你懂的话,说穿了也不是什么多高的东西。
但是如果你不懂的话,我可以说很多程序员工资都超2w了,他也不知道怎么弄这个,甚至不知道居然还要用到这个。
所以本资源要价很高。来自真实源码。
一个服务器端程序的运行,少不了两个必须的工具。
一、访问量与响应时间统计工具。
1、能让你知道当前服务上的接口单位时间内访问量是多少,总的响应时间是多少
2、通过1里的数据,你能知道哪个接口反应慢,如果服务假死,能根据它来快速判断哪些接口搞死了服务(实际情况中80%可以依此判断)。
二、过载保护
如果我现在的服务里接口1只能 支撑每1秒100次请求,那么如果1秒在100次以上的请求(如110次),那多出的10次就要主动拒绝服务。不然服务就会支持不住。本工具就是为这个而做。
1、单机内存版用来防止自己挂掉
2、内存版基于redis计数,可以用来控制用户的访问频率
实际应用中,只要加一个filter即可实现。见com.qq.common.util.visit.limit.StatFilter
TCP消息服务中,缓冲消息并发送,来自真实服务
场景如下:有一个功能,比如排行榜,这个房间的排行榜发生变化,要推送变化消息到房间。
这时,如果房间里送礼物很频繁,比如1秒 有10条送礼记录,排行榜发生了10次变化。
但是1秒推10条消息显然是2B的,要加一个缓冲,把10条 缓冲成1条推下去。
demo路径com.qq.common.util.buffer.TestMain
Struts1Hibernate3Spring2网上考试系统
各层间分的非常清楚,绝没有混在一起的地方。思想、方法,都是最好的
改良版的json-lib2.4
大家都知道jsonlib2.4之后有了属性过滤的功能,就是当把一个bean转成json的时候能指定哪些属性输出哪些不输出,不过代码很难看,如下
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter(){
public boolean apply(Object source, String name, Object value) {
if(name.equals("parentGroup") || name.equals("childGroups")) {
return true;
} else {
return false;
}
}
});
Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
JSONObject jsonObject = JSONObject.fromObject(user, config);
改良后新加了类MyFilter,下面是实例:
util方法:
public static String listToJsonArray(List<?> rs, PropertyFilter fs) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(fs);
JSONArray json = JSONArray.fromObject(rs, jsonConfig);
return json.toString();
}
调用util:
MyJsonUtil.listToJsonArray(list, new MyFilter("count", "pn", "url", "title"))
*这样写的话,是输出你指定的属性。
MyJsonUtil.listToJsonArray(list, new MyFilter(false, "count", "pn", "url", "title"))
*这样写的话,是不输出你指定的属性。
不好意思没写注释。。大家可以反编译了看看。这个改良包我用了一年多了,源码找不着了。好像就新加了这一个类。最近缺分了,发上来攒点。