如何用JAVA实现异步信息处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用JAVA实现异步信息处理相关的知识,希望对你有一定的参考价值。

通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异步则意味着某个处理过程可以允许多个线程同时处理。异步通常代表着更好的性能,因为它很大程度上依赖于缓冲,是典型的使用空间换时间的做法,例如在计算机当中,高速缓存作为cpu和磁盘io之间的缓冲地带协调cpu高速计算能力和磁盘的低速读写能力。

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

(2):可不可以在接收消息的模块中的addtolist函数中添加一个专门的处理函数,函数执行时先向list中添加消息,然后探测当前有没有处理线程,如果没有,则启动线程。

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

list的小例子:

Java codeclass 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();        ...    

参考技术A 一个进程专门循环这个list处理这个消息。是进程还是线程?进程间共享数据,你的list不是直接就能访问的,所以估计LZ说的是线程

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

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

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();

...

本回答被提问者和网友采纳
参考技术B jms,一般常用的实现是 activemq

以上是关于如何用JAVA实现异步信息处理的主要内容,如果未能解决你的问题,请参考以下文章

如何用Java抓取网页的具体内容

ASP如何用Ajax实现无刷新读取数据库信息(后台发布信息,前台不刷新也能看到)

淘宝api调用问题,如何用java获取到error信息。

现需要使用 jQuery 代码实现 ajax 请求,详细信息如下

如何用c语言printf输出bmp图片的像素信息。

如何用java代码把一个jar包里的文件替换掉