servlet 线程不安全,想必你们都知道了,原本想在网上找个例子试验下,结果没找到....仍是本身写一个吧。java
1.证实servlet线程不安全例子编程
写一个模拟http访问的 客户端程序,用一个线程池对固定的servlet访问1000次,看servlet的计数器是否等于1000。安全
servlet 的程序以下所示:线程
最后运行得到的count的最大的结果是990,不是1000.为何count的值不等于1000,由于++count不是原子操做,当多个线程对count进行读写操做时,就会出错。(详见java编程实践第二章)rem
2.servlet线程安全方式get
主要有三种方式servlet
1.将 int 类型的count用AtomicInteger代替,count.incrementAndGet()把当前值以原子方式加1:it
最后count的结果是1000,证实有效原理
2.使用synchronized加锁,保证操做的原子性:百度
最后count的结果是1000,证实有效:
3.使用lock机制,保证原子性。(和第二方式的内部原理相同)
最后count的结果是1000,证实有效
注意访问不一样的servlet,要修改相应的访问地址。
不知道到怎么在bolg中加代码,放在百度云盘上了....
源代码下载http://pan.baidu.com/share/link?shareid=40296&uk=3357993878