2016-12-20 1 views

답변

1

대부분의 UI 툴킷과 마찬가지로 은 전용 UI 스레드 (JavaFX의 경우 FX 응용 프로그램 스레드) 이외의 스레드에서 디스플레이의 일부인 액세스하지 않아야합니다. 또한 UI 스레드가 UI를 응답하지 않게 만들기 때문에 실행 시간이 걸리는 (또는 걸리는) 코드 (예 : I/O 또는 네트워킹과 같은 호출 차단)가 UI 스레드에서 실행되지 않아야합니다.

게시 한 두 코드 스 니펫은 스레딩과 상당히 다릅니다. ScheduledExecutor은 백그라운드 스레드 (FX 응용 프로그램 스레드가 아님)에서 updateTemperature()을 실행합니다. updateTemperature()이 실행하는 데 시간이 오래 걸리는 경우에 적합합니다. UI에 액세스하는 경우 예외가 발생하거나 UI를 일관성없는 상태로 유지할 가능성이 있습니다.

대조적으로 Timeline은 새 스레드를 생성하지 않고 updateTemperature()을 FX 응용 프로그램 스레드에서 실행합니다. updateTemperature()이 UI에 액세스하는 경우이 스레드에서 수행해야하며 이렇게하는 것이 편리합니다. 실행하는 데 시간이 오래 걸리는 경우 (초당 4 번 호출하기 때문에 실행하지 않는 것으로 가정) UI가 응답하지 않는 효과가 있습니다.

+0

실제로 'updateTemperature'에는 2 단계가 있습니다. 1 단계는 서비스를 통해 임시 직원을 얻고 있으므로이 스레드는 백그라운드 스레드에 있어야합니다. UI 스레드에서 바인드 가능 속성 ('SimpleFloatProperty'를 사용하고 있습니다)에 대한 업데이트를 수행해야하는지 아니면 백그라운드 스레드에서이 작업을 수행 할 수 있는지 궁금합니다. –