您的位置:首页 > 其它

Servlet线程安全问题。

2016-09-24 13:17 246 查看

1、Servlet是单实例多线程环境下运行的。

2、什么时候程序存在线程安全问题?

*  多线程并发;
*  有共享的数据;
*  共享数据有修改操作;


3、在JVM中,哪些数据可能会存在线程安全问题?

* 局部变量内存空间不共享,一个线程一个栈,局部变量在栈中存储,局部变量不会存在线程安全问题;
* 常量不会被修改,所以常量不会存在线程安全问题;
* 所有线程共享一个堆:
** new出来的对象在堆内存中存储,对象内部有“实例变量”,所以“实例变量”的内存多线程是共享的,多线程共同访问并且涉及到修改操作的时候就会存在线程安全问题;
* 所有线程共享一个方法区:
** 方法区中有静态变量,静态变量的内存也是共享的,若涉及到修改操作,静态变量也存在线程安全问题。


4、数据库中的线程安全问题:

* 多个线程共享同一张表,并且同时去修改表中一些记录,那么这些记录就存在线程安全问题。


5、怎么解决线程安全问题?

* 不使用实例变量,尽量使用局部变量;
* 若必须使用实例变量,那么我们可以考虑将该对象变成多例对象,一个线程一个java对象,实例变量的内存也不会共享;
* 若必须使用单例,那就只能使用synchronized线程同步机制,线程一旦排队执行,则吞吐量降低,降低用户体验。


6、Servlet怎么解决线程安全问题?

* 不使用实例变量,尽量使用局部变量;
* Servlet必须是单例的,所以只能考虑synchronized线程同步机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet 线程安全