class ThreadSafeClass extends Thread
{
private static int count = 0;
public synchronized static void increment()
{
count++;
}
public synchronized void decrement()
{
count--;
}
}
谁能解释一下为什么上面的类不是线程安全的?
发布于 2015-05-13 15:47:28
您有两个同步的方法,但其中一个是静态的,另一个不是。当访问一个同步的方法时,根据它的类型(静态或非静态),不同的对象将被锁定。对于静态方法,锁将放在Class对象上,而对于非静态块,锁将放在运行该方法的类的实例上。因为您有两个不同的锁定对象,所以可以有两个线程同时修改同一对象。
发布于 2015-05-13 18:18:42
因为有两种不同的方法,一个是实例级的,另一个是类级的,所以你需要锁定两个不同的对象才能使它成为ThreadSafe
https://stackoverflow.com/questions/30208524
复制相似问题