日期:2014-05-19  浏览次数:20788 次

如何用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
        }
    }
}

//调用sample
class 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的……