4 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
還有一個(gè)remove時(shí)越界異常:
while (cmdList.size() > 0){
String cmd = cmdList.remove(0); //這兒也報(bào)越界異常
}
第一次進(jìn)入while存在0的元素是沒問題的,當(dāng)?shù)诙芜M(jìn)入0的元素已經(jīng)被移除。所以會(huì)有
越界異常

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
只有兩種可能會(huì)引起這種情況:
1。多線程的并發(fā)訪問導(dǎo)致的,需要有外部同步機(jī)制。
2。List cmds可能是List的特殊實(shí)現(xiàn),檢查它的類型。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
第一個(gè)問題:
ArrayList.add不會(huì)報(bào)越界異常, 最多堆OutOfMemory,你這里
[code="java"]List cmds = TerminalMaps.terminal_commands.get(mac); [/code] ,起作用的應(yīng)該是這句吧,看看這個(gè)怎么實(shí)現(xiàn)的。
第二個(gè)問題:
并發(fā)情況下,有可能發(fā)生這個(gè)問題,2個(gè)線程都進(jìn)入了while循環(huán),結(jié)果第2個(gè)remove(0)的就會(huì)報(bào)越界異常。
添加回答
舉報(bào)