微信定时长服务,处理思路
来源:互联网 发布:店铺宝贝优化 编辑:程序博客网 时间:2024/05/02 18:03
主要采用(简单)
ExecutorService es = Executors.newFixedThreadPool(100);
public class Synchroniz_Task implements Runnable {
public Synchroniz_Task(Callable<E> call) {
c = call;
}
private Callable<E> c;
@Override
public void run() {
Future<E> future = null;
try {
future = es.submit(c);
Result = future.get(4, TimeUnit.SECONDS);
// 处理结果Result
}
catch (TimeoutException e) {
// 提示用户
try {
es.submit(new SynTask(future);
}
catch (Exception e1) {
processTaskException(e);
}
}
catch (Throwable e) {
processTaskException(e);
}
}
}
}
public class SynTask implements Runnable{
Future<E> f
public Task(Future<E> f){
this.f = f;
}
@Override
public void run() {
try {
f.get();
}
catch (Exception e1) {
processTaskException(e);
}
}
}
ExecutorService 取的 Future,然后通过它的get方法指定处理时间。
如果超时会抛出TimeoutException异常,这时可以先给使用者返回。
然后在线程池中,再提交一个任务,调用future的get()方法。
这时主线程可以返回了,等长时间处理的任务有结果放到一个结果处理队列中
这个处理队列可以再新建一个或多个线程作为消费者。
future的get(时间)和get()不会造成任务执行两次。
其内部原理是,启动两个线程,一个时间线程,一个任务线程,那个先完成,get取的就是这个。
取的结果后不影响另外一个执行。所以可以重复取的。
我理解,
定长任务,都是通过一次启动两个线程,然后两个线程看成两个任务。来完成定时返回控制的。
- 微信定时长服务,处理思路
- 微信tcp长连接
- 微信联名登陆 - 定时刷新服务号、订阅号access_token有效时间
- 微信朋友圈实现思路
- 【微信】微信消息定时推送
- [Redis]处理定时任务的2种思路
- 定时获取微信access_token
- 微信定时发送消息
- 微信生成二维码长按识别
- 微信语音连播的实现思路
- 微信红包开发设计思路
- 实现微信下载APP的思路
- 微信开发中 定时刷新 access_token
- 微信开发,access_token定时获取
- 定时任务存储 微信access_token
- SpringBoot定时获取微信access_token
- 微信处理红包
- 微信处理类
- Metrics-Java版的指标度量工具之一
- list删除元素问题
- MySql安装用户权限设置以及增量备份
- PackageManagerService笔记
- Android应用程序的国际化与本地化
- 微信定时长服务,处理思路
- LogCat
- undo表空间的作用、收缩及切换
- Codeforces Round 281 div2 C Vasya and Basketball
- Mongodb与Mysql的查询脚本操作对比
- 分布式异步消息框架构建笔记5——如何避开并行编程中的数据共享陷阱
- acmicpc.sdnu.edu.cn 1012区间合并
- Android ViewHolder通用写法(简洁、减少代码量)
- 关于前端开发谈谈单元测试