假设我有一个包装HashMap的类,如下所示:
public final class MyClass{ private final Mapmap; //Called by Thread1 public MyClass( int size ){ this.map = new HashMap ( 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"调用.
我是否正确理解这个类是线程安全的:
由于对map的引用被声明为final,所有其他线程都会看到map的初始状态(之前发生).
由于put/get/printMap/etc仅由Thread2调用,因此不需要互斥.
谢谢