, 당신은 다음과 같이 javafx.animation.Timeline을 사용할 수 있습니다자바 FX 타임 라인 ScheduledExecutorService를을 대 자바 FX 8 프로젝트에서
executorService.scheduleAtFixedRate(this::updateTemperature, 0, 250, TimeUnit.SECONDS);
은 거기에 하나를 다른 것에 사용하기위한 모범 사례?
, 당신은 다음과 같이 javafx.animation.Timeline을 사용할 수 있습니다자바 FX 타임 라인 ScheduledExecutorService를을 대 자바 FX 8 프로젝트에서
executorService.scheduleAtFixedRate(this::updateTemperature, 0, 250, TimeUnit.SECONDS);
은 거기에 하나를 다른 것에 사용하기위한 모범 사례?
대부분의 UI 툴킷과 마찬가지로 도은 전용 UI 스레드 (JavaFX의 경우 FX 응용 프로그램 스레드) 이외의 스레드에서 디스플레이의 일부인 액세스하지 않아야합니다. 또한 UI 스레드가 UI를 응답하지 않게 만들기 때문에 실행 시간이 걸리는 (또는 걸리는) 코드 (예 : I/O 또는 네트워킹과 같은 호출 차단)가 UI 스레드에서 실행되지 않아야합니다.
게시 한 두 코드 스 니펫은 스레딩과 상당히 다릅니다. ScheduledExecutor
은 백그라운드 스레드 (FX 응용 프로그램 스레드가 아님)에서 updateTemperature()
을 실행합니다. updateTemperature()
이 실행하는 데 시간이 오래 걸리는 경우에 적합합니다. UI에 액세스하는 경우 예외가 발생하거나 UI를 일관성없는 상태로 유지할 가능성이 있습니다.
대조적으로 Timeline
은 새 스레드를 생성하지 않고 updateTemperature()
을 FX 응용 프로그램 스레드에서 실행합니다. updateTemperature()
이 UI에 액세스하는 경우이 스레드에서 수행해야하며 이렇게하는 것이 편리합니다. 실행하는 데 시간이 오래 걸리는 경우 (초당 4 번 호출하기 때문에 실행하지 않는 것으로 가정) UI가 응답하지 않는 효과가 있습니다.
실제로 'updateTemperature'에는 2 단계가 있습니다. 1 단계는 서비스를 통해 임시 직원을 얻고 있으므로이 스레드는 백그라운드 스레드에 있어야합니다. UI 스레드에서 바인드 가능 속성 ('SimpleFloatProperty'를 사용하고 있습니다)에 대한 업데이트를 수행해야하는지 아니면 백그라운드 스레드에서이 작업을 수행 할 수 있는지 궁금합니다. –