【发布时间】:2014-11-20 12:43:43
【问题描述】:
如果一个类只有两个同步方法(静态或非静态),则认为该类是线程安全的。如果其中一种方法是静态的而另一种是非静态的怎么办?它仍然是线程安全的,还是如果多个线程调用这些方法会发生坏事?
有一些类似的线程,如static synchronized and non static synchronized methods in threads,它们描述了方法调用没有相互阻塞。但我很想知道线程安全世界中的坏事(如不一致的状态、竞争条件等)是否会发生。
编辑 1:
由于静态方法不能调用非静态方法,所以这边应该没有线程冲突。另一方面,如果非静态方法调用静态方法,它必须获取类锁。这仍然是线程安全的。因此,仅使用两种方法(一种是静态的,一种没有),我看不到任何线程冲突。是对的吗?换句话说,我能看到的唯一问题是当非静态方法访问一些静态变量时。但是,如果所有访问都是通过方法完成的,那么我看不到线程安全有任何问题。这些是我的想法。我不确定我是否在这里遗漏了一些东西,因为我对 Java 并发有点陌生。
【问题讨论】:
-
这取决于您是如何实现监控对象的。您是否进行了对象锁定或类级别锁定?请分享您的代码。
-
@JayaAnanthram - 方法同步隐含地表示在类或实例对象上:P
标签: java multithreading static synchronized