有一个VO
public class User
{
public String name="TTTTTTTTTTTT";
}//单例模式
public class UserManager
{
private User user = new User();

private UserManager(){} private static UserManager instance = null; public static synchronized UserManager getInstance()
{
if( instance == null )
{
instance = new UserManager();
}
return instance;
} public void changeName(String name)
{
System.out.println("before============"+user.name);  //查看没改过之前的name
user.name = name;
System.out.println("after============"+user.name);   //查看改过之后的name
}
} public static void main(String[] args)
{
UserManager.getInstance().changeName( "aaaaaa" );
UserManager.getInstance().changeName( "bbbbbb" ); }结果为:
before============TTTTTTTTTTTT
after============aaaaaa
before============aaaaaa
after============bbbbbb

可以看到第二次的name值是第一次改过的,现在想第二次调用的时候还是name的初始值
即输出
before============TTTTTTTTTTTT
after============bbbbbb
有何办法解决,高手指点,给源代码

解决方案 »

  1.   

    public static synchronized UserManager getInstance() 

    if( instance == null ) 

    instance = new UserManager(); 

    return instance; 

    改为:
    public static synchronized UserManager getInstance() 
    {  
     instance = new UserManager(); 
     return instance; 

    输出结果:
    before============TTTTTTTTTTTT
    after============aaaaaa
    before============TTTTTTTTTTTT
    after============bbbbbb
      

  2.   

    楼上这样做,就不是单例了  
    我要是单例,就是保证内存里只有一个UserManager类,
    看看ThreadLocal能解决吗
      

  3.   

     class User 

    public final static String DEFAULT_NAME="TTTTTTTTTTTT";
    public String name= DEFAULT_NAME; } //单例模式 
    public class UserManager 

    private User user = new User(); private UserManager(){} private static UserManager instance = null; public static synchronized UserManager getInstance() 

    if( instance == null ) 

    instance = new UserManager(); 

    instance.user.name= User.DEFAULT_NAME;
     return instance; 
    } public void changeName(String name) 

    System.out.println("before============"+user.name);  //查看没改过之前的name 
    user.name = name; 
    System.out.println("after============"+user.name);  //查看改过之后的name 
    } public static void main(String[] args) 

    UserManager.getInstance().changeName( "aaaaaa" ); 
    UserManager.getInstance().changeName( "bbbbbb" ); } 
    }