繁体   English   中英

使用其他类的公共静态HashTable的同步方法。 如何使该方法线程安全?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM