如何用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 轮询不是挺好么。
[解决办法]
[解决办法]