问个jsp中的static问题,具体看内容吧
比如jsp用的是tomcat的服务器。
其中有个bean叫Person吧,然后有个操作他的类PersonManager
在PersonManger中有些方法,如:
public static boolean addPerson(....){}
我不明白的就是,有两个jsp添加新的Person时,就调用PersonManager.AddPerson
这个时间会不会有冲突?
在服务器中,应该是tomcat为他们建立一个线程吧 ?然后这两个jsp是不是在自己的线程都各有一个相当于自己的addPserson方法?
不知道我说明白没 ?
------解决方案--------------------不同的应用使用不同的类加载器,因此静态变量、静态方法不会相互干扰。但是同一个类加载其中静态变量会相互影响。不使用静态变量的静态方法则不会相互干扰。
关于tomcat类加载器,参见:
http://www.qqread.com/java/2007/04/g308049.html
------解决方案--------------------jsp都是编译成servlet进行执行的,servlet本身都是多线程的
------解决方案--------------------会有冲突,两个jsp中使用的是同一个addPserson(),与有多少个线程没有关系。
我觉得把addPserson()作为静态方法不是一个很好的设计,楼主有必要重构一下你的架构:_)
------解决方案--------------------静态方法是不会冲突的,方法本身和线程无关。关键是方法内部访问的变量。
如果各个线程访问相同的变量,那么这个变量应该用synchronized保护起来;如果应该为各个线程建立不同的变量,那么这个变量应该放入ThreadLocal的实例中。
------解决方案--------------------同意weihthchk(Spectrum)