servlet线程安全不安全

先把原文贴出来

http://blog.csdn.net/lcore/article/details/8974590

自己描述下读后感:

结论:servlet是线程不安全的

问什么咧,先看下定义,什么叫做线程安全?

说白了,就是两个线程同时访问一个方法或变量,如果存在不一样的情况,就说明这个类是线程不安全的。

什么情况会导致线程不安全呢?

一个类的方法只有一个add() a+b;不会导致线程不安全的问题的。因为a和b都是局部变量,它返回的永远是a+b

结论是一个类存在全局变量或者static变量时会有线程安全问题,比如add函数操作影响了全局量c,那么就会导致多个线程返回的值可能不一样的情况

这个值有时准确有时不准确,这更可怕,不容易被发现。

那么回到servlet线程安全问题上来,它线程安全吗,先看他又哪些方法和变量?

HttpSession ServletContext是全局变量,多线程可以同时进行读写

ServletRequest这个是线程安全的变量,只能被一个线程访问,它只在service()方法内有效,

doget dopost是service内调用的方法。

那么怎么控制让servlet线程安全呢?

使用局部变量

如果需要使用全局变量,使用synchronized和lock锁实现同步。

但是同步带来的问题是线程需要等待。

那么需要高并发的情况下如何设计呢?

分布式服务器,使用开源已经实现的nginx实现负载均衡到任务量少的中间件服务器上

使用线程池的概念,请求到达容器后,调用线程池的一个线程去处理请求,线程找到对应的servlet去处理。

servlet使用对象池的概念

数据库层面考虑分表:

一个典型的例子是一个账号量过亿的系统,要设计用户表。

可以用hash算一下用户名的哈希值,用这个值取模去分表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值