亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

Java:單線程集合遍歷時(shí),刪除元素為何不導(dǎo)致fail-fast事件?

瀏覽:158日期:2024-01-30 15:46:22

問題描述

http://blog.csdn.net/lw305080...里有如下代碼,while (ite.hasNext()) 代碼塊里有 ite.remove();刪除元素為何不導(dǎo)致fail-fast事件?

public void listen() throws Exception { System.out.println('start server'); // 輪詢訪問selector while (true) { // 當(dāng)注冊事件到達(dá)時(shí),方法返回,否則該方法會(huì)一直阻塞 selector.select(); // 獲得selector中選中的相的迭代器,選中的相為注冊的事件 Iterator ite = this.selector.selectedKeys().iterator(); while (ite.hasNext()) { SelectionKey key = (SelectionKey) ite.next(); // 刪除已選的key 以防重負(fù)處理 ite.remove(); // 客戶端請求連接事件 if (key.isAcceptable()) { ServerSocketChannel server = (ServerSocketChannel) key.channel(); // 獲得和客戶端連接的通道 SocketChannel channel = server.accept(); // 設(shè)置成非阻塞 channel.configureBlocking(false); // 在這里可以發(fā)送消息給客戶端 channel.write(ByteBuffer.wrap(new String('hello client').getBytes())); // 在客戶端 連接成功之后,為了可以接收到客戶端的信息,需要給通道設(shè)置讀的權(quán)限 channel.register(this.selector, SelectionKey.OP_READ); // 獲得了可讀的事件 } else if (key.isReadable()) { read(key); } }

問題解答

回答1:

在單線程中,使用Iterator刪除元素是正確的做法。

回答2:

SelectionKey key = (SelectionKey) ite.next(); // 刪除已選的key 以防重負(fù)處理 ite.remove(); //這樣不會(huì)fail-fast//this.selector.selectedKeys().remove(key); 這樣才會(huì)fail-fast

至于原理可以看這篇文章:http://blog.csdn.net/ld513508...

標(biāo)簽: java
主站蜘蛛池模板: 久久久成人网 | 中文字幕亚洲一区 | 国产精品久久毛片蜜月 | 国产精品国产精品国产三级普 | 一区二区三区国产美女在线播放 | 亚洲在线观看网站 | 亚洲 欧美 中文字幕 | 美女视频全部免费 | 欧美一级毛片片免费孕妇 | 亚洲成人自拍 | 国产精品亚洲专区一区 | 久久精品成人免费看 | 国产va精品网站精品网站精品 | 日本高清专区一区二无线 | 91精品国产9l久久久久 | 日本高清在线精品一区二区三区 | 伊人色在线观看 | 国产高清三级 | 黄色wwwwww| 伊人久久在线 | 欧美一级亚洲一级 | 国产亚洲精品精品国产亚洲综合 | 日本精品一区二区三区视频 | 亚洲一区二区三区久久久久 | 国产网站黄色 | 国产网址在线 | 性欧美另类老妇高清 | 中国美女牲交一级毛片 | 国产一级特黄特色aa毛片 | 99久久成人国产精品免费 | 色伦网| 国产精品久久国产精品99盘 | 久久爱com | 国产资源精品一区二区免费 | 久久99这里只有精品国产 | 亚洲精品中文字幕一区在线 | 精品国产午夜久久久久九九 | 精品视频在线看 | 天天五月天丁香婷婷深爱综合 | 欧美一区二区亚洲 | 久久精品一区 |