有一个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有何办法解决,高手指点,给源代码
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有何办法解决,高手指点,给源代码
{
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
我要是单例,就是保证内存里只有一个UserManager类,
看看ThreadLocal能解决吗
{
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" ); }
}