国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

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

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

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

問(wèn)題描述

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

public void listen() throws Exception { System.out.println('start server'); // 輪詢?cè)L問(wèn)selector while (true) { // 當(dāng)注冊(cè)事件到達(dá)時(shí),方法返回,否則該方法會(huì)一直阻塞 selector.select(); // 獲得selector中選中的相的迭代器,選中的相為注冊(cè)的事件 Iterator ite = this.selector.selectedKeys().iterator(); while (ite.hasNext()) { SelectionKey key = (SelectionKey) ite.next(); // 刪除已選的key 以防重負(fù)處理 ite.remove(); // 客戶端請(qǐng)求連接事件 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); } }

問(wèn)題解答

回答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
主站蜘蛛池模板: 河西区| 安龙县| 赣榆县| 珠海市| 岑溪市| 潼南县| 阜新| 林州市| 旌德县| 木兰县| 桦川县| 江门市| 东丽区| 故城县| 五台县| 栾川县| 贵州省| 海原县| 三门峡市| 澎湖县| 靖宇县| 瑞昌市| 宜城市| 合山市| 太湖县| 镇坪县| 内丘县| 乐业县| 沐川县| 宜都市| 扎兰屯市| 华亭县| 阿图什市| 尼勒克县| 永春县| 德兴市| 河池市| 平南县| 方城县| 临邑县| 南康市|