/**
* 对 界面上显示的娱乐版块进行排序.(优先级)
*
* @return
*/
private BaseMessage entertainmentSort() {
int size = mEntertainmentMap.size();
BaseMessage baseMessage = null;
if (size > 0) {
if (mEntertainmentMap.containsKey(TypeCst.LiveEntertainmentType.LIVE_TYPE_AUCTION)) {
baseMessage = mEntertainmentMap.get(TypeCst.LiveEntertainmentType.LIVE_TYPE_AUCTION);
} else if (mEntertainmentMap.containsKey(TypeCst.LiveEntertainmentType.LIVE_TYPE_GUESS)) {
baseMessage = mEntertainmentMap.get(TypeCst.LiveEntertainmentType.LIVE_TYPE_GUESS);
} else if (mEntertainmentMap.containsKey(TypeCst.LiveEntertainmentType.LIVE_TYPE_BET_VS)) {
baseMessage = mEntertainmentMap.get(TypeCst.LiveEntertainmentType.LIVE_TYPE_BET_VS);
} else if (mEntertainmentMap.containsKey(TypeCst.LiveEntertainmentType.LIVE_TYPE_BET_CONTENT)) {
baseMessage = mEntertainmentMap.get(TypeCst.LiveEntertainmentType.LIVE_TYPE_BET_CONTENT);
} else {
baseMessage = null;
}
} else {
baseMessage = null;
}
return baseMessage;
}
先帖一波代码,这样运行HashMap 为什么 会出现 打断点 已经进入else if 然后又返回到另一个else if 什么鬼....
tips: 开始以为是同步 或者线程锁的问题,但是更换HashTable和其他并发 同步 容器 ,问题还没有解决 ..
求大神 相助,我仔细检查代码 是没问题的啊.
详细描述下问题:怕大家看不懂,就是 已经执行第三个else if ,下一步 直接返回到第二个else if.
我把每个else if都打印了线程ID ,没发现子线程 也枷锁了 .
天蓬老师2017-04-18 10:26:15
沒看出什麼大問題,不過題主是不是可以考慮一下程式碼風格。可能會幫助Debug
private BaseMessage entertainmentSort() {
if (!mEnterainmerntMap.isEmpty()) {
TypeCst.LiveEntertaimmentType[] types = new TypeCst.LiveEntertainmentType[]{TYPE_ACTION, TYPE_GUESS, TYPE_BET_VS, TYPE_BET_CONTENT};
for (TypeCst.LiveENtertainmentType type : types) {
if (mEnterainmerntMap.containsKey(type))
return mEnterainmerntMap.get(type);
}
}
return null;
}
PHPz2017-04-18 10:26:15
感謝各位,問題解決了 ,是IDE 欺騙了我, 本身JDK 語法上 是沒有Return 之後再Return的,在Android Studio上面Debug模式 可能會出現這樣的狀況.
也不存在多執行緒,這個問題 總之 不要被雙眼 蒙蔽 多打 斷點 .