servlet线程不安全的实例已及解决办法

       servlet 线程不安全,想必你们都知道了,原本想在网上找个例子试验下,结果没找到....仍是本身写一个吧。java

1.证实servlet线程不安全例子编程

      写一个模拟http访问的 客户端程序,用一个线程池对固定的servlet访问1000次,看servlet的计数器是否等于1000。安全

http客户端模拟程序

 

servlet 的程序以下所示:线程

unSafeServlet

最后运行得到的count的最大的结果是990,不是1000.为何count的值不等于1000,由于++count不是原子操做,当多个线程对count进行读写操做时,就会出错。(详见java编程实践第二章)rem

2.servlet线程安全方式get

主要有三种方式servlet

1.将 int 类型的count用AtomicInteger代替,count.incrementAndGet()把当前值以原子方式加1:it

AtomicIntegerSafeServlet

最后count的结果是1000,证实有效原理

2.使用synchronized加锁,保证操做的原子性:百度

synchronizedSafeServlet

最后count的结果是1000,证实有效:

3.使用lock机制,保证原子性。(和第二方式的内部原理相同)

lockSafeServlet

最后count的结果是1000,证实有效

注意访问不一样的servlet,要修改相应的访问地址。

不知道到怎么在bolg中加代码,放在百度云盘上了....

源代码下载http://pan.baidu.com/share/link?shareid=40296&uk=3357993878

相关文章
相关标签/搜索