从java中的两个线程同步对HashMap的访问

时间:2014-02-09 12:48:28

标签: java android multithreading

我有两个线程在运行(一个是主线程(Say Thread1),另一个是后台线程(比如Thread2))。我可以从HashMaphashMap访问Thread1变量Thread2Thread1修改hashMap,Thread2读取HashMap。

Thread1代码中将是:

synchronized(hashMap){
   //updating hashMap 
}

在Thread2代码中将是:

synchronized(hashMap){
     //reading hashMap
}

我可以通过这种方式使用hashMap同步synchronized block的访问权限吗?

3 个答案:

答案 0 :(得分:5)

是。但您也可以使用 Collections.synchronizedMap 实用程序方法使哈希映射线程安全:

Map yourMap = new HashMap();
Map synchronizedMap = java.util.Collections.synchronizedMap(yourMap);

或者您可以使用默认情况下线程安全的 ConcurrentHashMap Hashtable

答案 1 :(得分:0)

我会使用ReadWriteLock

ReadWriteLock rwl = new ReentrantReadWriteLock();

void read() {
    rwl.readLock().lock();
    try {
        ... read
    } finally {
        rwl.readLock().unlock();
    }
}

void write() {
    rwl.writeLock().lock();
    try {
        ... write
    } finally {
        rwl.writeLock().unlock();
    }
}

答案 2 :(得分:0)

您应该尝试使用HashTableConcurrentHashMap。这两个类都是同步的,所以你不必自己处理它。我不认为您可以直接在特定对象上使用synchronized关键字。它通常与.classthis一起使用,即类类型。