class A{
public static int a = 1;
public sychronzied haha(){
a = 2
}
如上面这个程序,synchronized能阻止一个线程用该类一个对象的haha()方法改变a的值吗?
如果可以改变a的值的话,有什么方法可以把a 的值锁住,让其他线程无法更改a
public static int a = 1;
public sychronzied haha(){
a = 2
}
如上面这个程序,synchronized能阻止一个线程用该类一个对象的haha()方法改变a的值吗?
如果可以改变a的值的话,有什么方法可以把a 的值锁住,让其他线程无法更改a
private final static int a = 1;
public static synchronized haha(){
a = 2
}
用类自己来当锁,如果不能改变方法成静态的可以用一个唯一的对象当锁class A{
public static int a = 1;
private static Integer i = 0;
public haha(){
synchronized(i){
a = 2
}
}
楼主synchronized打错了。
在static方法上的synchronized和synchronized(本身.class)等价一般比较建议建一个空对象来专门用作锁
静态对象为锁的话,那此类所有实例都共享这个锁public class MyClass{
private static final Object locker = new Object(); public void haha() {
synchronized(locker) {
// TODO
}
}
}
也不容易和其他对象冲突,也不用担心null之类的错误