首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

怎么用JAVA实现异步信息处理

2012-08-14 
如何用JAVA实现异步信息处理要求,有多个模块会给一个专门接受消息的模块发消息这个模块有一个list接受这些

如何用JAVA实现异步信息处理
要求,有多个模块会给一个专门接受消息的模块发消息
这个模块有一个list接受这些个消息,
然后有一个进程专门循环这个list处理这个消息。(比如打印出来)

应该怎么实现比较好,
我关键不会起进程。
另外,比如说好长时间没有接受消息,
等来新的消息的时候怎么唤醒处理消息的进程。


求高手指点12.。。

[解决办法]
重新启动一个java程序就启动了一个进程
可以用操作系统命令行启动 Runtime.getRuntime().exec("java -classpath . XXX");

进程间通信的东西没弄过
[解决办法]
可不可以在接收消息的模块中的addtolist函数中添加一个专门的处理函数,函数执行时先向list中添加消息,然后探测当前有没有处理线程,如果没有,则启动线程。
[解决办法]
一个进程专门循环这个list处理这个消息。是进程还是线程?进程间共享数据,你的list不是直接就能访问的,所以估计LZ说的是线程

如果LZ想省点工作,可以用BlockingQueue来代替你的list,这样线程等待和唤醒不用你自己写代码实现了,如果非要用list,那么就自己做好同步

list的小例子,LZ自己参考发挥吧

Java code
class MessageConsumer extends Thead {    private List<YourMessageType> list;    private boolean running = true;    public MessageConsumer(List<YourMessageType> list) {this.list = list;}    public void run() {        while (running) {            YourMessageType msg = null;             try {                synchronized(list) {                    while (list.size() == 0) {                        list.wait();                    }                    msg = list.remove(0);                    list.notiryAll();                }            } catch (Exception e) {                e.printStackTrace();            }            if (msg == null) continue;            //System.out.println(msg); //print message        }    }}//调用sampleclass ShareModule {    List<YourMessageType> list = new ArrayList<YourMessageType>();    ...}public class Main {    public static void main(String[] args) {        ShareMudule sm; //so on        ...        Thread t = new MessageConsumer(sm.list);        t.start();        ...    }}
[解决办法]
为什么不用xian程,而用进程呢?
[解决办法]
既然是 web 程序 用quartz 轮询不是挺好么。
[解决办法]
探讨
要求,有多个模块会给一个专门接受消息的模块发消息
这个模块有一个list接受这些个消息,
然后有一个进程专门循环这个list处理这个消息。(比如打印出来)

应该怎么实现比较好,
我关键不会起进程。
另外,比如说好长时间没有接受消息,
等来新的消息的时候怎么唤醒处理消息的进程。


求高手指点12.。。

[解决办法]
探讨
我说的太不清楚了吧,楼上的可能都没懂我的意思。
Class Message---->我定义的message

Class MessageReceive---->我定义的接受Message的类,里面有一个方法
addMessage(Message message)
list.add(message);

Class MessageHanndle---->我定义的处理Message的……

热点排行