oversea201405

servlet默认是存在线程安全问题的,但是说白了,servlet的线程安全问题实际上就是多线程的线程安全问题,因为servlet恰巧是一个多线程才会出现安全性问题。

浏览器每次通过http协议去提交请求,都会实例化一个servlet对象,即产生一个线程,如果他们操作的是同一个对象,应该把该变量定义成实例变量,但这就可能发生线程不安全的问题。下面举个简单的例子:

 张三看到仓库里有3件物品,他要去拿两件,但这时李四也来了,抢先他一步拿了两件物品,当张三拿的时候,仓库根本无法提供给他两件物品。这就是线程不安全。

这种情况下应该使用synchronized加锁装置保证同一时刻只有一个线程运行,只有当这个线程运行完并释放锁,下一个线程才能运行。


还有一种情况是多个用户操作的不是同一个变量,这时就应该将变量定义为局部变量,他们各自操作各自的对象,各个线程之间不会相互干扰,也不会产生线程安全性问题。

分类:

技术点:

相关文章:

  • 2022-01-07
  • 2022-01-07
  • 2021-10-20
  • 2022-01-07
  • 2021-11-22
  • 2021-04-19
猜你喜欢
  • 2022-12-23
  • 2021-05-27
  • 2021-11-25
  • 2022-01-07
  • 2022-01-07
  • 2022-01-07
相关资源
相似解决方案