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 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?