多语言展示
当前在线:743今日阅读:167今日分享:16

线程安全问题

什么是线程安全问题,怎样避免线程安全问题?
方法/步骤

A:通过servlet的生命周期我们可以知道  某个Servlet类在有应用中是伪单例的,它是通过一个servlet类实例来处理所有的客户端请求,而每一个客户端请求都是一个线程;在这种情况下,这个servlet实例就成了在多线程环境中的公共资源了,如果这个servlet实例再有一个成员变量,则这个成员变量就有可能会发生线程安全性问题。如果是在doGet 或者 doPost方法中的局部变量则不会出现线程安全问题因为一个请求一个线程,每个线程在调用doGet 或者 doPost方法时都会在栈内存开辟空间,这样每个线程一个空间,就不会有线程安全问题;而成员变量是在堆中被访问,堆是被线程共享的空间,就会发生线程安全问题B:在使用任何一个servlet类时,要注意避免发生成员变量的线程安全性问题C:如何避免servlet的成员变量的线程安全问题?1、不使用servlet类的成员变量2、可以使用servlet类的成员变量,但是都只是取值   而不是修改值3、使用ThreadLocal本地线程控制  成员变量每个线程一个(后面会讲解)4、给会修改成员变量的代码加同步锁控制

推荐信息