new Thread(new Runnable() {
@Override
public void run() {
List<Socket> 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에 대해 새 소켓을 만들고 해당 소켓을 sockets
목록에 추가하려고합니다. 나는 for 루프를 사용하고있다. try ... catch
을 사용하면 소켓 연결이 실패 할 때 루프 실행이 오랜 시간 동안 일시 중지됩니다. 그래서 소켓 연결에 실패했는지 알기 위해 더 나은 대안이 필요하며 소켓 목록에 null 소켓을 추가하여 루프를 계속 실행하십시오.`try ... catch` 메서드를 사용하지 않고 특정 시간 후에 for 루프를 계속하는 방법은 무엇입니까?
+1 스레드에 대한 생각. 이 클래스에 대한 모든 메소드가 자바에 있다면 나는 생각하고 있었다. 그리고 질문, 한 번에 많은 스레드가 있다면 어떻게 될 것인가? JVM은 거대한 메모리를 관리해야합니다. – Mukit09
@ Mukit09 스레드를 사용하는 데 메모리 오버 헤드가 있다는 것은 사실입니다. 하지만 무언가를 얻으려면 뭔가를 주어야합니다.이 경우 실행 시간이 짧아집니다. 메모리 사용량이 큰지 아닌지는 물론 스레드 수에 따라 달라집니다. 나는 OP가 100s의 소켓을 유지하려고하지 않을 것이라고 희망하고 싶습니다. 어떤 경우에는 괜찮을 것입니다. 이를위한 클래스는 100 % 확신하지 못했지만 연관성이있는 몇 가지 예제와 같이 동시성 API에 유용한 클래스가 많이 있습니다. – janos