【发布时间】:2015-07-24 08:51:20
【问题描述】:
class ThreadSafeClass extends Thread
{
private static int count = 0;
public synchronized static void increment()
{
count++;
}
public synchronized void decrement()
{
count--;
}
}
谁能解释为什么上面的类不是线程安全的?
【问题讨论】:
-
我不了解 Java,但看起来这些方法中的每一个都是单独线程安全的,但是您可以在 each 的方法同时进行。也许如果您有一个采用 bool (
increment) 的方法,那么它将是线程安全的。或者,如果您使用了一些锁定对象。正如我所说,我不了解 Java - 我的评论源于 C# 知识。 -
我也不是很了解Java,但是要同步访问静态变量,
synchronized应该只用在静态方法中。所以在我看来,即使你删除了increment方法,它仍然不是线程安全的,因为两个实例(只能通过同一个实例进行同步访问)可以同时调用该方法。 -
只要你从不创建类的实例,它就是线程安全的。
-
为什么你认为它不是线程安全的。
标签: java multithreading thread-safety