例如有两个用户A,B同时在线访问一个jsp页面;
假如A执行以下代码:
Constant.ATTRIBUTE=1;
doSomething();//此方法很耗时
System.out.println(Constant.ATTRIBUTE);就在A执行很耗时的方法doSomething()时,用户B执行了以下代码:Constant.ATTRIBUTE=2;
doSomething();//此方法很耗时
System.out.println(Constant.ATTRIBUTE);请问执行完后用户A看到的Constant.ATTRIBUTE的值为1还是2
用户B看到的Constant.ATTRIBUTE的值是什么?
假如A执行以下代码:
Constant.ATTRIBUTE=1;
doSomething();//此方法很耗时
System.out.println(Constant.ATTRIBUTE);就在A执行很耗时的方法doSomething()时,用户B执行了以下代码:Constant.ATTRIBUTE=2;
doSomething();//此方法很耗时
System.out.println(Constant.ATTRIBUTE);请问执行完后用户A看到的Constant.ATTRIBUTE的值为1还是2
用户B看到的Constant.ATTRIBUTE的值是什么?
解决方案 »
- 如何在HashMap中增加和删除条目
- 使用命令提示符往已有jar包添加新文件
- 请教一个关于servlet程序的问题??希望高手来解答
- peer to peer chat 与传统 chat 有什么分别?
- 开始投简历咯!大哥大姐给提下意见吧!(进者有分,灌水无分!)
- 求几本 j2se基础类的几本书?各位老鸟们推荐下
- InstallShield中如何设置环境变量
- 我在一个applet中import了sun.net.ftp.*,结果就运行不了了
- 求jdk在xp中设置?
- 别人写的包中的文件(源文件和class文件)要在jbuilder下导入应该分别放在jbuilder下的什么目录?
- java虚拟机是用java自已开发的呀,还是用c或c++开发的呀?一直不明白.想得到确切答案,谢谢.
- (菜鸟)关于Object中的equals()一个问题??急急急!
public class Constant{
public static int ATTRIBUTE=0;
}
如果你用constant,最好用类来实现,比如。
public class Constant
{
private static final String name = "elan";
public static getName()
{
return name;
}
}
不要使用常量接口!
public static String getName()
{
return name;
}
> 用户B看到的Constant.ATTRIBUTE的值是什么?因为是 A 先执行的赋值,B 后执行的赋值(假设二者的 doSomething() 中都不再有对 Constant.ATTRIBUTE 的赋值),那么,A 和 B 最后看到的都是 B 的赋值:2。至于这算不算“线程安全”,这要看怎么说。所谓安全与否,是有前提的。如果 A 预期的逻辑是在其整个执行过程中,Constant.ATTRIBUTE 的值完全由它自己作主,不应该由别人*偷偷*修改,那么现在这种做法显然就是*不安全*的;反之,如果 A 并没有这种预期,甚至,A 就是要在这段时间中等待 Constant.ATTRIBUTE 的值发生变化(比如信号灯应用),那就谈不上*不安全*了。最后说说楼主给出的题目:静态变量是否线程安全
我认为,“是否线程安全”跟“是否静态变量”是两个没有直接关系的事情。说远一点,所谓“静态变量”其实可以理解为一个 Class 对象的成员变量。
如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal;静态变量肯定是不行的