EnumSet 是线程安全的吗?我的测试表明它是安全的
Is EnumSet Thread-safe? My test show me it is safe
这些是我的测试代码,输出告诉我它是线程安全的。我错了吗?
我认为所谓的线程安全就是run(){}
方法是原子的
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import com.enumTest.enumStateMac.Input;
public class TestEnumMapSafe implements Runnable {
private String name = "";
public TestEnumMapSafe(String name) {
this.name = name;
}
static Map<Input, Input> enumHashMap = new EnumMap<Input, Input>(Input.class);
public static void main(String[] args) throws InterruptedException {
TestEnumMapSafe testEnumMapSafe1 = new TestEnumMapSafe("Thread_1");
TestEnumMapSafe testEnumMapSafe2 = new TestEnumMapSafe("Thread_2");
TestEnumMapSafe testEnumMapSafe3 = new TestEnumMapSafe("Thread_3");
testEnumMapSafe1.run();
testEnumMapSafe2.run();
testEnumMapSafe3.run();
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
enumHashMap.put(Input.ABORT_TRANSACTION, Input.ABORT_TRANSACTION);
enumHashMap.put(Input.CHIPS, Input.CHIPS);
enumHashMap.put(Input.QUARTER, Input.QUARTER);
System.out.println("this.name: " + this.name + " enumHashMap.keySet() : " + enumHashMap.keySet());
enumHashMap.clear();
}
}
}
/*this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
*/
有人可以帮忙吗?我对 "thread-safe" 的测试有问题吗?
来自 EnumSet javadoc:
* Like most collection implementations, <tt>EnumSet</tt> is not
* synchronized. If multiple threads access an enum set concurrently, and at
* least one of the threads modifies the set, it should be synchronized
* externally.
EnumSet 是 'safe' 仅在同时使用时不会抛出任何异常的意义上。但是,它必须同步,否则您可能会看到过时版本的数据。
至于测试线程安全。正如其他人提到的,您无法通过 运行 一些测试来证明您的程序已正确同步。由于缺乏同步,您可能会观察到一些错误行为,但不能保证您一定会这样做。
要真正让您的测试执行多线程操作,请尝试以下操作:
public static void main(String[] args) throws InterruptedException {
TestEnumMapSafe testEnumMapSafe1 = new TestEnumMapSafe("Thread_1");
TestEnumMapSafe testEnumMapSafe2 = new TestEnumMapSafe("Thread_2");
TestEnumMapSafe testEnumMapSafe3 = new TestEnumMapSafe("Thread_3");
final ExecutorService executor = Executors.newCachedThreadPool();
executor.submit(testEnumMapSafe1);
executor.submit(testEnumMapSafe2);
executor.submit(testEnumMapSafe3);
executor.shutdown();
//wait some arbitrary period to allow test to complete
executor.awaitTermination(10, TimeUnit.MINUTES);
}
但是,正如其他人所说,这可能是徒劳的。您可能会看到问题,也可能不会。
这些是我的测试代码,输出告诉我它是线程安全的。我错了吗?
我认为所谓的线程安全就是run(){}
方法是原子的
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import com.enumTest.enumStateMac.Input;
public class TestEnumMapSafe implements Runnable {
private String name = "";
public TestEnumMapSafe(String name) {
this.name = name;
}
static Map<Input, Input> enumHashMap = new EnumMap<Input, Input>(Input.class);
public static void main(String[] args) throws InterruptedException {
TestEnumMapSafe testEnumMapSafe1 = new TestEnumMapSafe("Thread_1");
TestEnumMapSafe testEnumMapSafe2 = new TestEnumMapSafe("Thread_2");
TestEnumMapSafe testEnumMapSafe3 = new TestEnumMapSafe("Thread_3");
testEnumMapSafe1.run();
testEnumMapSafe2.run();
testEnumMapSafe3.run();
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
enumHashMap.put(Input.ABORT_TRANSACTION, Input.ABORT_TRANSACTION);
enumHashMap.put(Input.CHIPS, Input.CHIPS);
enumHashMap.put(Input.QUARTER, Input.QUARTER);
System.out.println("this.name: " + this.name + " enumHashMap.keySet() : " + enumHashMap.keySet());
enumHashMap.clear();
}
}
}
/*this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_1 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_2 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
this.name: Thread_3 enumHashMap.keySet() : [QUARTER, CHIPS, ABORT_TRANSACTION]
*/
有人可以帮忙吗?我对 "thread-safe" 的测试有问题吗?
来自 EnumSet javadoc:
* Like most collection implementations, <tt>EnumSet</tt> is not
* synchronized. If multiple threads access an enum set concurrently, and at
* least one of the threads modifies the set, it should be synchronized
* externally.
EnumSet 是 'safe' 仅在同时使用时不会抛出任何异常的意义上。但是,它必须同步,否则您可能会看到过时版本的数据。
至于测试线程安全。正如其他人提到的,您无法通过 运行 一些测试来证明您的程序已正确同步。由于缺乏同步,您可能会观察到一些错误行为,但不能保证您一定会这样做。
要真正让您的测试执行多线程操作,请尝试以下操作:
public static void main(String[] args) throws InterruptedException {
TestEnumMapSafe testEnumMapSafe1 = new TestEnumMapSafe("Thread_1");
TestEnumMapSafe testEnumMapSafe2 = new TestEnumMapSafe("Thread_2");
TestEnumMapSafe testEnumMapSafe3 = new TestEnumMapSafe("Thread_3");
final ExecutorService executor = Executors.newCachedThreadPool();
executor.submit(testEnumMapSafe1);
executor.submit(testEnumMapSafe2);
executor.submit(testEnumMapSafe3);
executor.shutdown();
//wait some arbitrary period to allow test to complete
executor.awaitTermination(10, TimeUnit.MINUTES);
}
但是,正如其他人所说,这可能是徒劳的。您可能会看到问题,也可能不会。