日期:2014-05-20  浏览次数:20772 次

java 线程异步调用的问题
我的业务需求:接收多个client端并发的数据,然后将其insert到表A中,并对该数据同若干个表(b,c,d)进

行比较,如果有相同记录重新生成一条记录,insert到表e中。

以前的方式是:server段利用线程接收数据,insert到表A中,表A建立触发器同表b,c,d进行比较,如果有相

同记录insert到表e中。

现在打算把触发器的工作交给java应用程序来做,因为表b,c,d的记录数比较多,相对于线程接收数据来说进

行比较的时间很长,如何才能做到线程接收数据,然后异步的调用进行结果比较的java方法类呢?
也就是说当insert到表A后,让server端接收数据的线程异步调用结果比较的java方法类,不需要等待结果返回
就直接去重新监听是否有新的client端请求。

不知道应该怎样实现这样的功能?传输使用的是socket udp协议。

谢谢。

------解决方案--------------------
接收数据与把数据处理分开两个不同的线程

把接收的数据放在一个队列里边,接收udp数据的线程将数据存入队列
处理数据的线程检查队列里是否有数据,有数据就处理数据,处理完将处理的数据从队列移出

你多个socket也可以是多个线程,他们都将得到的数据放在一个队列里,跟处理数据的线程分开就可以了
------解决方案--------------------
up
------解决方案--------------------
异步监听
使用同样的业务方法
不使用缓存
在数据库事务隔离的情况下 哪来的异步问题?
------解决方案--------------------
你是单线程监控吧?

换作法!单开一个线程,只负责监控。有任务到来,从线程池取一线程工作.
你单独的线程可以一直监听,工作线程可以插入表和查询表!

但是你事务的隔离级别呢?如果bcd表不插入数据还罢了,如果你a表要求不能有相同的数据呢?反正你数据库描述不够清楚.
------解决方案--------------------
1.监控 接收数据
2.数据处理
学习了。
------解决方案--------------------
请问这样写对吗?

Server.java//主程序
public static Queue <String> myQueue;//定义一个队列
ExcutorService poolSjcj = null;//数据采集线程池
ExcutorService poolSjcl = null;//数据处理线程池
poolSjcj.excuete(new sjcjThread(serverSocket));
poolSjcj.excuete(new sjclThread());

sjcjThread.java//数据采集线程 实现Runnable接口
.....进行数据的采集,然后加入到队列
Server.myQueue.add(data);

sjclThread.java//数据处理线程 实现Runnable接口
从队列取值,做相应处理。



------解决方案--------------------
做个队列
多个线程
java线程1接收加队列
java线程2判断信息
------解决方案--------------------
学习了,
------解决方案--------------------
两个线程,一个队列进行处理.
一个线程用于接受数据:ReceiveThread.将来自己客户端的数据整理到队列中去供数据处理线程使用.
一个线程用户处理数据:HandleThread.业务逻辑处理.定时检查队列中是否有未处理的数据.如果有数据就进行处理操作。
队列:存放两个线程的共享数据.也是临时数据结构.

楼主如果不清楚,可以多贴些代码,大家好帮你分析.
------解决方案--------------------

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
up