java timeout 예제
지정된 시간 설정으로 SO_TIMEOUT을 밀리초 단위로 활성화/비활성화합니다. 이 옵션을 0이 아닌 시간 으로 설정하면 이 소켓과 연결된 InputStream에 대한 read() 호출이 이 시간 동안만 차단됩니다. 이러한 메서드는 외부 이벤트를 지원하기 위해 제공됩니다. 도착 알림에만 관심이 있는 경우 일반적으로 이러한 방법을 사용하지 않습니다. 그러나 알림은 외부 조건에 따라 달라질 수 있으며, 이 경우 알림이 도착할 때도 관련이 있습니다. 이러한 조건이 발생하지 않는 경우 시간 시간이 필요할 수 있습니다. 예를 들어, 우리는 주식 피드 서버에 연결하는 프로그램을 작성할 수 있습니다. 이 프로그램은 서버에 연결하기 위해 30초 동안 기꺼이 기다릴 수 있습니다(즉, 연결 상태를 만족시키기 위해). 30초 이내에 연결이 발생하지 않으면 프로그램이 백업 서버에 연결하려고 시도할 수 있습니다. 프로그램에서 wait(30000) 메서드를 호출하여 이 작업을 수행할 수 있습니다.
때로는 소켓을 사용하여 반드시 소켓을 사용하는 것이 아니라 외부 시스템과의 통신이 필요한 코드를 작성할 때 시간 시간 지정 알고리즘을 구현하는 방법이 필요할 수 있으므로 지정된 시간 이후에 요청이 필요하지 않을 수 있습니다. 결과를 반환하면 사용자가 결과에 따라 행동할 수 있도록 시간 시간 오류를 throw해야 하며, 결코 오지 않을 결과를 무기한 기다리지 않아야 합니다. 따라서 응용 프로그램에 대한 시간 시간 시간(시간) 기능을 구현하는 정말 쉬운 방법을 확인했습니다. 사용 중인 API에 시간 지정이 있는 읽기 메서드가 포함되어 있으면 예외를 catch하여 문제를 쉽게 해결할 수 있지만 그렇지 않은 경우 시간 지정 논리를 직접 구현해야 합니다. 이렇게 하려면 FutureTask 클래스를 사용할 수 있습니다. 위의 예제 Java 코드와 같이 밀리 초를 포함하는이 소켓 시간 초과 설정과 같은 호출을 처리 할 때마다 이 방법으로 코드를 작성합니다 . 시간 시간 – 밀리 초에서 기다릴 수있는 최대 시간. 알림이 도착하지 않는다는 것을 알고 있다면 대기(long)와 수면(long)의 차이점은 무엇입니까? 예를 들어 개체에 notify() 메서드를 사용하지 않는다고 가정해 보겠습니다. 그런 다음 이론적으로 개체에 기다릴 이유가 없습니다(). 그러나 wait(long) 메서드는 Lock을 해제하고 다시 획득한다는 점을 제외하면 Thread 클래스의 sleep(long) 메서드처럼 작동한다는 추가이 있습니다.
즉, 대기 및 알림 메커니즘을 사용하지 않는 경우에도 잠금을 유지하지 않고 잠자는 방법으로 wait(long) 메서드를 사용할 수 있습니다. 예를 들어, 다음과 같은 클래스가 있다고 가정해 봅시다: 우리가 말했듯이, 이것은 간단한 예입니다: wait(long) 메서드를 사용하지 않고 다음 클래스를 코딩해야 한다고 가정합니다: 기본적으로 우리가 하고 있는 일은 FutureTask 개체를 만들고 호출 가능한 인터페이스를 만드는 것입니다. 시간 정이 필요한 호출 메서드를 실행합니다. 그런 다음 스레드를 만들어 실행합니다. 마지막으로 get 메서드를 호출하여 결과를 반환하거나 시간 초과(이 경우 5초)가 초과되면 TimeoutException이 throw됩니다. 시간 지정이 만료되면 소켓이 여전히 유효하지만 java.net.SocketTimeout예외가 발생합니다. 영향을 미치려면 차단 작업을 입력하기 전에 이 옵션을 활성화해야 합니다.