什么是线程安全?
如果你的代码是所在的进程有多个线程同时运行,而这些线程会同时运用这个代码,如果每次运行的结果和单线程运行的结果是一样的。那么也就是说你的线程是安全的。
比如:买火车票的时候,孙悟空,猪八戒,唐三藏,他们三个人同时进入12306买车票,他们同时操作的代码是一样的。但是都可以买到票。互不干扰,这说明线程是安全的。
servlet是怎样存在线程安全问题?
1. 当多个客户端同时访问同一个servelet时,web服务器为为某个客户端的访问创建一个请求。
并在线程上调用servelet的servelet方法。如果这时servelet的方法同时访问一个资源的同时,
就会产生线程安全问题。
比如:
如何解决?
1避免使用实例变量
线程安全问题还有些是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。
ervlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现。
线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径