funkcja w Javie umożliwia jednoczesne wykonywanie dwóch lub więcej części programu. Każda część jest wątkiem. Te wątki często muszą koordynować swoje działania. Odbywa się to za pomocą kilku ostatnich metod, takich jak Wait i Notify w Javie. Ten artykuł pomoże ci szczegółowo zrozumieć te metody.
Będę omawiać tematy w następującej kolejności:
- Co to jest synchronizacja wątków?
- Co to są metody Wait () i Notify ()?
- Dlaczego i jak używać Wait () i Notify () w Javie?
- Przykład
Zaczynajmy!
Co to jest synchronizacja wątków?
Programy wielowątkowe mogą regularnie pojawiać się w sytuacji, w której wiele plików próbować dotrzeć do tego samego zasobu, który daje oszukańcze i zaskakujące wyniki. Czasami więcej niż jeden wątek może próbować uzyskać dostęp do udostępnionego zasobu, musisz upewnić się, że zasób będzie używany tylko przez jeden wątek naraz. Można to zrobić za pomocą Synchronizacja w Javie.
Teraz mówię o ankiecie. Sondowanie to proces wielokrotnego testowania warunku, aż stanie się prawdziwy. Ta metoda jest realizowana za pomocą aby sprawdzić, czy określony warunek jest prawdziwy, czy nie. Możesz użyć tej metody dla wątków, ale ta metoda marnuje wiele cykli procesora, a także sprawia, że proces wdrażania jest bardzo nieefektywny. Aby uniknąć tego rodzaju błędów, wprowadzono metody takie jak Wait i Notify w Javie.
Co to są metody Wait () i Notify ()?
Aby rozwiązać problem wielowątkowości, metody takie jak Wait i Notify in są używane. Klasa Object używa tych trzech ostatnich metod, które umożliwiają wątkom komunikowanie się o zablokowanym stanie zasobu. Nazywa się je również Strzeżonymi Blokami.
jest magisterskim i podyplomowym
Czekać()
Ta metoda powoduje, że wątek czeka, aż inny wątek wywoła metody notify () i notifyAll () dla tego obiektu. Ta metoda Wait () mówi wątkowi wywołującemu, aby zwolnił blokadę i przeszedł w stan uśpienia, dopóki inny wątek nie przejdzie do tego samego monitora i nie wywoła funkcji notify (). Ta metoda zwalnia blokadę przed czekaniem i ponownie uzyskuje blokadę przed powrotem z metody wait ().
Metoda Wait () jest ściśle zintegrowana z blokadą synchronizacji. Odbywa się to za pomocą funkcji niedostępnej bezpośrednio z mechanizmu synchronizacji.
Składnia:
synchronized (lockObject) {while (! condition) {lockObject.wait ()} // wykonaj akcję tutaj}
Bieżący wątek musi być właścicielem monitora obiektu. Musi być wywoływana tylko z metody synchronicznej, w przeciwnym razie zgłosi wyjątek.
Notyfikować()
Ta metoda służy do powiadamiania programu że musi funkcjonować. Budzi jeden wątek, który nazwał czekać() metoda na tym samym obiekcie.
Zwróć uwagę na dzwonienie notyfikować() ostatecznie nie rezygnuje z blokady. Mówi oczekującemu wątkowi, że może się obudzić. Jednak blokada nie jest faktycznie zrezygnowana, dopóki zsynchronizowany blok powiadamiającego nie zostanie zakończony. Teraz powiedz, jeśli dzwonisz notyfikować() na zasobie, ale zgłaszający nadal musi wykonywać działania przez 10 sekund w swoim zsynchronizowanym bloku, wątek, który czekał, będzie musiał czekać co najmniej przez kolejne 10 sekund, aby powiadamiający zwolnił blokadę obiektu, nawet jeśli powiadamia () został wywołany.
Składnia:
synchronized (lockObject) {// setting_the_condition lockObject.notify () // ewentualny dodatkowy kod}
NotifyAll ()
Ta metoda jest używana do obudzenia wszystkich wątków, które wywołały funkcję wait () na tym samym obiekcie. W większości sytuacji najpierw zostanie uruchomiony wątek o najwyższym priorytecie, nawet jeśli nie jest to gwarantowane. Inne rzeczy są takie same jak w przypadku metody notify ().
Dlaczego i jak używać Wait () i Notify () w Javie?
Należy użyć opcji Czekaj i powiadamiaj w ponieważ są one związane z zamkiem, a obiekt ma blokadę. Mimo że czekanie i powiadamianie w Javie to dość fundamentalna koncepcja, są one zdefiniowane w klasa obiektu . Zaskakujące jest, że nie jest łatwo napisać kod przy użyciu funkcji czekania i powiadamiania. Możesz to przetestować, pisząc kod, aby rozwiązać problem producent-konsument przy użyciu funkcji czekania i powiadamiania. Tutaj mam wspólne Kolejka idwa wątkinazywa Producent i Konsument . Producent wątek umieszcza numer w udostępnionej kolejce i Konsument Wątek wykorzystuje liczby ze współużytkowanego zasobnika.
Warunkiem jest to, że po wyprodukowaniu produktu wątek konsumenta musi zostać zgłoszony i podobnie po tym, jak wątek producenta konsumpcyjnego musi zostać zgłoszony. Ten wewnętrzny wątekKomunikacjaosiąga się za pomocą funkcji czekaj i powiadamiaj w Javie.
Uwaga : Wait i nieMetody tify są zdefiniowane w klasie obiektówi muszą być wywoływane wewnątrz zsynchronizowanego bloku.
Przykład
public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} klasa Thread2 extends Thread1 {int total @Override public void run () {synchronizowane (to) {for (int i = 0 i<=100 i++) { total += i } notify() }}}
Zauważ, że w powyższym przykładzie zsynchronizowany jest obiekt Thread2, czyli b. To b kończy obliczenia, zanim wątek główny wyprowadza swoją całkowitą wartość.
Wynik:
To prowadzi nas do końca tego artykułu, w którym poznaliśmy na ekranie Czekaj i powiadamiaj w Javie.Mam nadzieję, że powyższe treści okazały się pomocne w ulepszaniu Twojego wiedza, umiejętności. Czytaj dalej, odkrywaj dalej!
Sprawdź także autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie i certyfikacja J2EE i SOA firmy Edureka jest przeznaczony dla studentów i profesjonalistów, którzy chcą zostać programistami Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i szkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych jak Hibernate & Spring.