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

taoxuyuan2016 2017-04-10 10:41:10
各位大神,求帮助,我现在项目中有一个需求,对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);
}
}
真心求大家的帮助,谢谢了!
...全文
1226 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FengRider 2017-04-11
  • 打赏
  • 举报
回复
我的思路是: 1、任务线程由线程池来实现; 2、监听线程独立在线程池外面,用于监听任务线程的处理结果,即实时监听临时表; 3、启一个主线程,用于控制监听线程和线程池。 详细的代码就不贴了,在这贴出来太长,不方便观看。 主线程启动后,先启动线程池,然后从9张表中读出数据,然后生成任务对象,将任务对象添加到线程池中。这个动作完成后,再初始化监听线程对象,并启动监听线程,然后观察监听对象,当监听对象有数据返回后,将数据再生成任务,添加到线程池中。当所有的数据都已经处理完了,主线程退出,并发送信号给监听线程和线程池对象,监听线程收到信号自我销毁,线程池对象收到信号后,也自我销毁。
月之隶 2017-04-10
  • 打赏
  • 举报
回复
可以看看多线程生产者消费者,一个生产者,产生数据放入队列,多个消费者取数据下发。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧