java callable 예제


미래의 개념은 자바 스크립트와 같은 다른 언어의 약속과 유사합니다. 나중에 나중에 완료될 계산의 결과를 나타냅니다. 난 그냥 자바 8에서 본 미래의 방법 get (longtimeout, TimeUnitunit)는 대기 시간이 시간 만료되면 시간 시간 지정을 해야하며 null을 반환하지 않습니다 . 위의 프로그램을 실행하면 java Future get() 메서드가 java 호출 가능한 작업이 완료될 때까지 대기하기 때문에 출력지연을 알 수 있습니다. 또한 이러한 작업을 실행하는 스레드는 10개뿐입니다. future.get() 메서드는 작업이 완료될 때까지 차단하고 기다립니다. 호출 가능한 작업에서 원격 서비스에서 API를 호출하고 원격 서비스가 다운되면 future.get()이 영원히 차단되어 응용 프로그램이 응답하지 않게 됩니다. 파일 내용을 읽고 두 개의 호출 가능한 스레드를 사용하여 동일한 콘텐츠를 다른 파일에 쓰는 방법은 무엇입니까? 팁 : 우리가 자바 퓨처 인터페이스의 방법 중 일부를 재정의하려는 경우, 예를 들어 get() 메서드를 무기한 대기하지 않고 일부 기본 시간 후에 시간 초과에 재정의할 경우 Java FutureTask 클래스는 기본 구현인 편리한 경우 향후 인터페이스. 이 클래스에 대해 자세히 알아보려면 Java FutureTask 예제를 확인하십시오. 아마도 가장 좋은 출발점은 브라이언 괴츠 자바 퓨처의 “실제로 자바 동시성”으로 관련 Callable 작업을 취소하는 cancel() 메서드를 제공합니다. get() 메서드의 오버로드된 버전이 있는데 결과를 기다리는 시간을 지정할 수 있으므로 현재 스레드가 더 오랜 시간 동안 차단되지 않도록 하는 것이 유용합니다. 이 있습니다Done() 및 isCancelled() 메서드가 관련 호출 가능한 작업의 현재 상태를 확인합니다.

Java 실행자 프레임워크의 이점 중 하나는 작업을 처리한 후 단일 결과를 반환할 수 있는 동시 작업을 실행할 수 있다는 것입니다. Java 동시성 API는 Callable 및 Future의 두 가지 인터페이스를 통해 이를 달성합니다. 스레드를 만드는 방법에는 두 가지가 있습니다. 그러나 Runnable에서 부족한 한 가지 기능은 스레드가 종료될 때(즉 run() 완료시 스레드 반환 결과를 만들 수 없다는 것입니다. 이 기능을 지원하기 위해 호출 가능한 인터페이스가 Java에 있습니다. 이 시나리오에서는 구현이 최선의 것이 아니라고 생각합니다. 호출 가능한 대기 가능 은 정확히 1 초 동안 대기하지만 약간의 임의가 있는 경우 get() 메서드인 차단 메서드가 for 루프에서 실행을 느리게 할 것입니다 (결과 중 일부는 아직 준비되지 않았기 때문입니다). while(!list.isEmpty()) 블록을 사용하여 다시 작성하면 Future ready(use isDone()))가 있을 때마다 실행을 지연하지 않고 결과를 안전하게 얻고 목록에서 제거할 수 있습니다. Java 라이브러리에는 실행 가능 과 Future를 구현하는 구체적인 유형 FutureTask가 있어 두 기능을 편리하게 결합합니다. FutureTask는 생성자에게 Callable을 제공하여 만들 수 있습니다.

그런 다음 FutureTask 개체는 스레드 개체를 만드는 스레드의 생성자에 제공 됩니다. 따라서 간접적으로 스레드는 Callable으로 만들어집니다. 더 강조하기 위해 Callable을 사용하여 직접 스레드를 만들 수 있는 방법은 없습니다. Java는 결과를 반환하는 작업을 정의하는 호출 가능한 인터페이스를 제공합니다. 호출 가능은 결과를 반환하고 확인된 예외를 throw할 수 있다는 점을 제외하면 Runnable과 유사합니다. 안녕하세요 Pankaj, 우리는 일반적으로 “사용자/작업자 스레드 인스턴스” ThreadPoolExecutor/스케줄러에 전달 하지만 여기 호출 가능한 인터페이스 는 Runnable 인터페이스를 확장 하지 않습니다 어느 쪽도 아니 우리가 어떤 run() 메서드를 재정의.