Map
はスレッドxとyに書き込まれ、スレッドzで読み込まれます。java:同期ブロック内のループ内のprotoオブジェクト
スレッドX:
synchronized (map) {
map.put(0, protoObjX); // protoObjX is a protocol buffer object
}
//...
synchronized (map) {
map.remove(0);
}
スレッドY:
synchronized (map) {
map.put(1, protoObjY); // protoObjY is a protocol buffer object
}
//...
synchronized (map) {
map.remove(1);
}
スレッドZ:
synchronized (map) {
logger.info(map.values().size()); // prints 2
for (ProtoObjType obj: map.values()) {
logger.info(obj); // logger is a org.apache.log4j.Logger
}
}
のみprotoObjXまたはprotoObjYが印刷されています。どちらも決してありません。なぜこれが起こっていますか?
私がlogger.info(map.values());
を1つずつ行うのではなく、代わりに行うと、機能します。 proto objの代わりにPOJOを使用すると、それは機能します。
マップのどの実装を使用していますか?それはバグかもしれない。 –