Cześć,
Mam do Was pytanie z kategorii programowania współbieżnego. Obecnie używam metody sleep(). Spełnia ona moje wymagania i robi to co ma robić ale niestety okazuje się że przy większej ilości użytkowników serwer zaczyna klękać a to dla tego że metoda ta zawiesza wątek na serwerze. Jak takich wątków zaczyna wisieć 'dziesiąt' serwer niemiłosiernie zwalnia. I teraz pytanie do Was. Czy jest jakaś fajna metoda które wstrzymała by działanie aplikacji na określony czas ale nie blokowała wątku na serwerze tylko zwalniała go aż do momentu wybudzenia?
Kontekst watku musi byc gdzies trzymany
Chyba ze caly kontekst mozesz wywalic do smieci ale wtedy po co Ci ten watek. I czemu w ogole sleepa robisz?
Poczytaj o pulach wątków i ExecutorService. To co robisz ze sleepem to herezja.
W pracy mam napisany piekny kod przez Comarch ;) Proces trwa ~30s z czego sleep zajmuje od min 26s do 28s. Wyszli na wyzszy level i losują sobie dlugosc trwania sleepa o.O. Wywal te sleepy na boga i uzyj jak koledzy mowia ExecutorService. Zaprojektuj to rozwiazanie inaczej i nie uzywaj sleepa bo na 100% da sie to tak zrobic albo kiedys ktos bedzie o Tobie mowil tak samo brzydko jak ja o kolegach z Comarchu :)
Podam Ci prosty przykład, współdzielisz z żoną samochód. Przyjechałeś po pracy, chcesz odpocząć dwie godziny i jedziesz na siłownię. Twoja żona chciałaby w tym czasie pojechać do koleżanki na kawę. Używając sleepa, nie może wziąć samochodu w czasie w którym jest de facto nie używany.
Powinieneś zastanowić się nad planowaniem zadań, poczytaj sobie o ScheduledExecutorService, w którym możesz planować czasowo wykonywane zadania.