再看Struts2关于线程安全方面[待补充]

看到了几个一直没有好好注意的东东,分享一下,有空的时候也整理一下,就当是备忘先。

 

一、CopyOnWriteArrayList  这个是在看xwork2的容器管理时发现的一个List,它属于java.util.concurrent包,主要用于多线程的并发操作方面,看了相关的介绍后,再看jdk源码,发现它的用法还真的有点不同,为了线程安全,当add时直接再复制一份出来。所以在一些数据库的数据装入List的时候不要直接使用它,可以先放入一般的像ArrayList,再初始化为CopyOnWriteArrayList 。

 

xwork2的相关代码(com.opensymphony.xwork2.config.ConfigurationManager):

private List<ContainerProvider> containerProviders = new CopyOnWriteArrayList<ContainerProvider>(); private List<PackageProvider> packageProviders = new CopyOnWriteArrayList<PackageProvider>();

CopyOnWriteArrayList的add方法:

public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len + 1); newElements[len] = e; setArray(newElements); return true; } finally { lock.unlock(); } }

 

二、由CopyOnWriteArrayList引入的Lock --  ReentrantLock

 

对于这个锁一直没有去了解过,今晚第一次看。相关IBM文章在这里:

http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html

以后再找个时间写写自己对这个Lock的见解。

 

三、对于Java并发包的相关类理解

java.util.concurrent包要好好了解先。

http://www.javaeye.com/topic/363625

http://www.111cn.net/jsp/49/aa8961ca5424361db17f6aeb2f76bcb4.htm

http://java.sun.com/docs/books/tutorial/essential/concurrency/

http://tutorials.jenkov.com/java-concurrency/index.html

你可能感兴趣的:(多线程,数据库,object,list,struts,IBM)