博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet线程不安全的实例已及解决办法
阅读量:6883 次
发布时间:2019-06-27

本文共 588 字,大约阅读时间需要 1 分钟。

hot3.png

       servlet 线程不安全,想必大家都知道了,本来想在网上找个例子试验下,结果没找到....还是自己写一个吧。

1.证明servlet线程不安全例子

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

http客户端模拟程序

 

servlet 的程序如下所示:

unSafeServlet

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

2.servlet线程安全方式

主要有三种方式

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

AtomicIntegerSafeServlet

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

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

synchronizedSafeServlet

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

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

lockSafeServlet

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

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

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

源代码下载

 

转载于:https://my.oschina.net/u/731423/blog/78735

你可能感兴趣的文章
我的程序员工作经历(一) 之 苦逼了
查看>>
开发人员必读的11本最具影响力书籍
查看>>
[python] 连接MySQL,以及多线程、多进程连接MySQL续
查看>>
ext.js的十大机制
查看>>
mac install mysql : mac 上安装mysql
查看>>
交换机链路聚合
查看>>
mysql查询优化-Show命令
查看>>
VMware GPU虚拟化技术参数
查看>>
2008系统使用newsid软件防止蓝屏
查看>>
ITIL 认证
查看>>
lucene源代码学习之LZ4压缩算法在lucene中应用
查看>>
设计模式之原型模式
查看>>
Linux网络服务-搭建DHCP服务器
查看>>
简单的nginx一键部署脚本
查看>>
ComponentOne C1Editor 中高亮查找文字
查看>>
使用Xcode和Instruments调试解决iOS内存泄露
查看>>
React-native-i18n
查看>>
我的友情链接
查看>>
OCP之六 管理ORACLE用户
查看>>
java反射创建带构造参数的类 并执行方法
查看>>