假设我有一个包装 HashMap 的类,如下所示:
public final class MyClass{
private final Map<String, String> map;
//Called by Thread1
public MyClass( int size ){
this.map = new HashMap<String, String>( size );
}
//Only ever called by Thread2
public final String put( String key, String val ){
return map.put( key, value );
}
//Only ever called by Thread2
public final String get( String key ){
return map.get( key );
}
//Only ever called by Thread2
public final void printMap( ){
//Format and print the contents of the map
}
}
此类通过“Thread1”初始化。但是,put、get、printMap 和其他操作只能由“Thread2”调用。
我是否正确理解这个类是线程安全的:
由于对映射的引用被声明为最终状态,所有其他线程将看到映射的初始状态(已建立之前发生)。
由于 put/get/printMap/etc 仅由 Thread2 调用,因此不需要互斥。
谢谢