这几乎是线程安全的(如果有的话)。唯一缺少的是声明hashMap
字段final
。这保证了地图的安全发布。
除此之外,我没有看到任何问题(关于线程安全)。ConcurrentHashMap是线程安全的,因此存储和检索字节数组也应该如此。
此外,由于您总是复制字节数组,因此它们永远不会在线程之间共享,除了存储在 Map 中的那些。将ConcurrentHashMap
安全地将这些发布到所有线程,并且由于它们从未被修改(意味着它们实际上是不可变的),因此可以保证线程安全。
最后,根据评论,这里是关于其他一些方面的改进版本:
private final ConcurrentHashMap<String, Object> hashMap =
new ConcurrentHashMap<String, Object> ();
void setByteArray(String string, byte[] byteArray) {
hashMap.put(string, byteArray.clone());
}
byte[] getByteArray(String string) {
Object result = hashMap.get(string);
if(result == null)
return null;
else
return ((byte[]) result).clone();
}
首先是private
修饰符 for hashMap
,因此子类不能存储任何其他对象,例如共享字节数组。
第二件事是 getter 中的 null 检查。根据您的要求,您可能希望替换return null;
为或其他内容。throw new IllegalArgumentException();