如何用java实现缓存

Posted

tags:

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

java有自己的缓存输入输出类,比如 InputStream,FileOutputStram等 具体可以查看API,
要想自己实现的话,很简单,设置一个足够大的字节数组就可以了,把需要的东西放进去,就是个缓存。
参考技术A 静态容器变量

如何用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实现异步信息处理

如何用Java Socket实现一个简单的Redis客户端工具

Java实现缓存(LRU,FIFO)

如何用java实现画图

如何用Java实现URLEncode

如何用Java实现URLEncode