taoxuyuan2016 2017-04-10 02:06 采纳率: 0%
浏览 5350
已结题

通过线程将数据库读取的数据放在java队列,然后通过多线程处理数据的解决办法

各位大神,求帮助,我现在项目中有一个需求,对9张单表的有增删改的操作的时候
将数据通过单线程的方式放入java队列中,然后通过多线程的方式下发。我会建一张
下发失败的表,如果通过java队列下发失败了的数据会存入下发表,等待下次下发。
现在我做的是在这9张表有增、删、改、操作的时候通过队列管理器将数据放入队列中,然后用多线程的方式下发。
现在求助大家的是前面的步骤,就是队列管理器中的功能,也就是单线程放数据到队列中及通过队列多线程下发的步骤。由于小弟未在项目中真正的写过多线程的实例,特真心请求大神帮助,帮忙修改下代码的逻辑,小弟写了个初稿,肯定未完善,请大神帮忙完善下,多多考虑,非常感谢大家了!
以下是我初写的队列管理器的功能。请大神帮忙修改下,谢了

public class TaskQueueManage {
public static BlockingQueue queue;
private TaskQueueManage() {
queue = new LinkedBlockingQueue();
}
private static volatile TaskQueueManage instance;
public static TaskQueueManage getIstance() {
if (instance == null) {
synchronized (TaskQueueManage.class) {
if (instance == null) {
instance = new TaskQueueManage();
}
}
}
return instance;
}
//用线程将数据库中有增、删 、改操作的数据放入队列中
public static void put(final Object obj) {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
//将读取的数据库的数据放入队列
queue.put(obj);
} catch (Exception e) {
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
//用多线程取出队列中的数据
public static void take() {
//下发用线程池,将用多线程进行下发
ExecutorService service = Executors.newScheduledThreadPool(5);
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
Object obj = queue.take();
//取出数据,待操作....
} catch (Exception e) {
}
}
};
service.equals(runnable);
}
}

真心求大家的帮助,谢谢了!

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-04-10 02:06
    关注

    就你的需求而言,适合使用消息队列,这是现成的,比如activemq,没必要自己造轮子了。

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记