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 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办