hibernate的sessionFactory如果用单例得到的话是对同一个线程单例,在servlet中sessionFactory是放在哪里的?
[code="java"]public class TestSingle {
public static void main(String args[]){
new Thread(){
public void run(){
for(int i=0;i System.out.println("1-->"+SingleClass.getInstance());
try{
Thread.sleep(50);
}catch(Exception e){
e.printStackTrace();
}
}
}
}.start();
new Thread(){
public void run(){
for(int i=0;i<10;i++){
System.out.println("2-->"+SingleClass.getInstance());
try{
Thread.sleep(50);
}catch(Exception e){
e.printStackTrace();
}
}
}
}.start();
}
}
class SingleClass{
private static final SingleClass singleClass=new SingleClass();
public static SingleClass getInstance(){
return singleClass;
}
}[/code]
结果是:
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
1-->com.infoexplorer.SingleClass@10b30a7
2-->com.infoexplorer.SingleClass@10b30a7
证明确实两个线程调用的同一个SingleClass对象
楼主思想就错了,单例 默认就是当前jvm范围内单例,而无论有多少个线程,都是在同一个jvm下。所以sessionFactory用单例模式就可以了。
正因为单例模式不是每个线程对应一个对象,所有线程公用一个对象,所以才出现同步问题