首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求教!关于 多线程 怎么锁定静态变量

2012-05-27 
求教!关于 多线程 如何锁定静态变量class A{public static int a 1public sychronzied haha(){a 2}如

求教!关于 多线程 如何锁定静态变量
class A{
public static int a = 1;
public sychronzied haha(){
  a = 2
}
如上面这个程序,synchronized能阻止一个线程用该类一个对象的haha()方法改变a的值吗?
如果可以改变a的值的话,有什么方法可以把a 的值锁住,让其他线程无法更改a


[解决办法]
在方法上的synchronized和synchronized(this)等价
在static方法上的synchronized和synchronized(本身.class)等价

一般比较建议建一个空对象来专门用作锁
静态对象为锁的话,那此类所有实例都共享这个锁

Java code
public class MyClass{ private static final Object locker = new Object(); public void haha() {  synchronized(locker) {   // TODO  } }}
[解决办法]
直接锁定类即可
Java code
  synchronized(A.class) {} 

热点排行