Zauważam, że NetBeans ostrzega mnie przed używaniem Thread.sleep() w pętli while w moim kodzie Java, więc zrobiłem kilka badań na ten temat. Wydaje się, że najważniejszą kwestią jest wydajność, podczas której twój warunek może stać się prawdziwy, podczas gdy licznik wciąż śpi, marnując zegar ścienny, czekając na kolejną iterację. Wszystko to ma sens.Thread.sleep() w pętli while
Moja aplikacja musi skontaktować się z systemem zdalnym i okresowo odpytywać o stan operacji, czekając na zakończenie operacji przed wysłaniem następnego żądania. W chwili obecnej kod logicznie to robi:
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
Zważywszy, że okoliczność jest sprawdzenie zdalnej operacji (co jest dość kosztowny proces, w który biegnie przez kilka sekund), jest to ważny stosowanie nici. sleep() w pętli while? Czy istnieje lepszy sposób na uporządkowanie tej logiki? Widziałem kilka przykładów, w których mógłbym używać klasy Timer, ale nie widzę korzyści, ponieważ nadal wydaje się, że sprowadza się do tej samej prostej logiki powyżej, ale z dużo większą złożonością.
Niedźwiedź pamiętając, że system zdalny w tym przypadku nie jest pod moją bezpośrednią kontrolą, ani nie jest napisany w Javie, więc zmiana tego celu na bardziej "współpracujący" w tym scenariuszu nie jest opcją. Moją jedyną opcją aktualizowania wartości aplikacji dla stanu jest utworzenie i wysłanie wiadomości XML, otrzymanie odpowiedzi, przeanalizowanie jej, a następnie wyodrębnienie potrzebnej części informacji.
Wszelkie sugestie lub komentarze będą mile widziane.
myślę, że w tej sytuacji jest całkowicie w prawo (jeśli nie można dostać powiadomienie, gdy wywołanie RPC zakończeniu). Sposób obejścia ostrzeżenia polega na użyciu polecenia do wykonania podczas cyklu. – kenota
Myślę, że koszt pollingu stanu wywołania RPC musi być dość wysoki, aby zapewnić sen o długości 10 sekund. Jedna sekunda byłaby bardziej rozsądna, albo sen, który czeka na dłuższy czas w zależności od liczby poprzednich operacji snu (z pewnym maksimum oczywiście). –
Jak już wspomniałem, zdalna operacja trwa kilka sekund (przez co rozumiem gdziekolwiek od 3-5). Biorąc pod uwagę kilka skrajnych przypadków, należy zająć się tym, że 10 sekund jest za krótkie. –