日期:2014-05-20  浏览次数:20566 次

常量成员变量,涉及线程安全的讨论
class Test
{
static finall HashTable<String, String> table = initialHashTable();

public Test()
{

}

public void useHashTable()
{
//这里使用table 
table.getValue("123");
}
static HashTable<String, String> initialHashTable()
{
HashTable<String, String> ht = new hashTable<String, String>();
ht.put("123", "abc");
ht.put("456", "dfe");
return ht;
}
}


这个类是要在web上被调用,如果有100个人调用useHashTable这个函数,如果用HashTable(线程安全),每个人都得等别人使用完了才能用.效率也太低了吧.如果用hashMap,虽然不是线程安全的,但我的useHashTable只是读这个数组,并不写,有问题吗?


如果table 不是个复杂类型,只是个String类型,那不管多少个线程读它,都没问题吧?

------解决方案--------------------
如果完全不涉及写操作,并发就不是问题。


Java提供了不错的支持并发的Map,可降低并发操作时的同步开销,具体可Google了解。
------解决方案--------------------
并发控制就是为了控制不取到脏数据,即然都没有去改变过值,就不会存在并发与否了