我有两个线程在运行(一个是主线程(Say Thread1
),另一个是后台线程(比如Thread2
))。我可以从HashMap
和hashMap
访问Thread1
变量Thread2
。 Thread1
修改hashMap
,Thread2读取HashMap。
在Thread1
代码中将是:
synchronized(hashMap){
//updating hashMap
}
在Thread2代码中将是:
synchronized(hashMap){
//reading hashMap
}
我可以通过这种方式使用hashMap
同步synchronized block
的访问权限吗?
答案 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)
您应该尝试使用HashTable
或ConcurrentHashMap
。这两个类都是同步的,所以你不必自己处理它。我不认为您可以直接在特定对象上使用synchronized
关键字。它通常与.class
或this
一起使用,即类类型。