java for try catch_java – 如何在一段时间后继续使用for循环而不使用`try … catch`方法?...

new Thread(new Runnable() {

@Override

public void run() {

List socketList = new ArrayList<>();

for (String ip: iplist) {

Socket socket = null;

try {

socket = new Socket(ip,23);

} catch (IOException e) {

e.printStackTrace();

}

socketList.add(socket);

}

}

}).start();

我试图为iplist中的每个ip创建一个新套接字,并将该套接字添加到套接字列表中.我正在使用for循环.当使用try … catch时,当套接字连接失败时,循环执行会暂停一段时间.所以我需要一个更好的替代方案来知道套接字连接失败,并通过向套接字列表添加一个空套接字使循环继续执行.

解决方法:

你可以这样做:

>使用单独的线程创建每个套接字.

>使用并发集合(而不是List)来存储套接字,例如ConcurrentLinkedDeque.

>等待所有套接字创建者线程完成,然后根据需要将并发列表的所有元素添加到正常列表中.您可以使用例如CompletionService来实现此功能.

使用这种方法,失败的套接字仍然需要很长时间,但不会阻止其他套接字的创建.如果每个套接字可以运行一个线程,那么创建所有套接字所用的最大时间将接近单个故障的时间.

通过等待所有套接字创建,实现将不会与您当前的解决方案完全不同,它会更快,并且复杂性将是自包含的.

另一个选择是不要等到创建所有套接字,并让所有套接字创建在其线程中完成.这将与当前实现有很大不同,处理套接字创建线程的复杂性会影响方法之外的代码.

标签:java,android,for-loop,sockets,java-threads

来源: https://codeday.me/bug/20190623/1266587.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值