![](/img/trans.png)
[英]if i call a non synchronized method from my synchronized method is non synchronized method thread safe?
[英]synchronized method that use a public static HashTable from other class. How can I make this method thread safe?
假设我有一个同步方法,该方法使用其他类的公共静态HashTable。 如何使该方法线程安全? 就我的理解而言,任何其他线程都可以像其他类中那样更改此HashTable,而不是在拥有键的类(同步方法的类)中进行更改,不是吗?
您对HashTable的理解不正确。 HashTable是同步的并且是线程安全的。
查看HashTable
的源代码。 所有公共方法都已同步。
public synchronized V put(K key, V value) {
public synchronized V get(Object key) {
public synchronized boolean contains(Object value) {
如果要在同步方法中使用HashMap ,则它可以工作,但前提是所有线程都使用包含该方法和HashMap的类的相同实例,为更清楚起见,请看下面的示例:
代码段
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
}
现在,如果所有线程都使用同一个SynchronizedCounter实例,我们确保一次只有一个线程在运行increment()
方法,但是如果每个线程都实例化自己的SynchronizedCounter实例,则该方法将不是线程安全的。
甲骨文的官方描述在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.