JavaRush /Blog Java /Random-PL /Przerwa kawowa #159. Cykl życia wątku w Javie. Interfejsy...

Przerwa kawowa #159. Cykl życia wątku w Javie. Interfejsy funkcjonalne i metody domyślne w Javie 8

Opublikowano w grupie Random-PL

Cykl życia wątku w Javie

Źródło: Medium W tym artykule omówiono różne stany cyklu życia wątków w Javie. Przerwa kawowa #159.  Cykl życia wątku w Javie.  Interfejsy funkcjonalne i metody domyślne w Javie 8 - 1Cykl życia wątku w Javie składa się głównie z przejść do różnych stanów, zaczynając od narodzin wątku, a kończąc na jego zakończeniu. Wątek jest gotowy do działania w momencie jego utworzenia i uruchomienia poprzez wywołanie metody start() w klasie Thread . Po wywołaniu metody Sleep() lub Wait() klasy Thread wątek staje się bezużyteczny. Aby programowo zarządzać wątkami, ważne jest określenie stanu wątku. Rozumiemy, jak cykl życia wątku Java określa jego stan. Oto, co mówi na ten temat dokumentacja Java: Wątek to ścieżka wykonania programu, która w trakcie swojego cyklu życia może wejść w jeden z pięciu stanów:
  1. Nowy
  2. Możliwość uruchomienia
  3. Działanie
  4. Zablokowany
  5. Martwy
1. Nowy (stan nowonarodzony) pojawia się, gdy tworzysz obiekt Thread w klasie Thread. Przepływ zostaje utworzony i znajduje się w stanie „nowonarodzonym”. Oznacza to, że utworzony wątek przechodzi w nowy stan, ale w instancji nie została jeszcze wywołana metoda start() . 2. Uruchomiony. Stan ten oznacza, że ​​wątek jest gotowy do działania. Kiedy metoda start() zostanie wywołana w nowym wątku, będzie on gotowy do uruchomienia. W tym stanie wątek czeka, aż procesor stanie się dostępny (czas procesora). Oznacza to, że wątek staje się kolejką (seria) wątków oczekujących na wykonanie. 3. Praca (stan pracy). Wykonywanie oznacza, że ​​procesor przydzielił przedział czasowy dla wątku do wykonania. Jest to stan, w którym wątek wykonuje swoją rzeczywistą funkcję. 4. Zablokowany (stan zablokowania). Wątek jest w stanie zablokowanym, gdy wstrzymuje się, śpi lub czeka przez pewien czas, aby spełnić dany warunek. 5. Stan martwy. Ten warunek występuje, gdy metoda run() kończy wykonywanie instrukcji. Wątek automatycznie się zatrzymuje lub przechodzi w stan martwy. Innymi słowy, gdy wątek wychodzi z metody run() , albo kończy się, albo staje się martwy.

Interfejsy funkcjonalne i metody domyślne w Javie 8

Źródło: Medium W tym artykule dowiesz się o niektórych zmianach wprowadzonych w Javie 8, a mianowicie o interfejsach funkcjonalnych i metodach domyślnych.

Jakie są metody domyślne?

Wiemy, że klasy abstrakcyjne mogą mieć metody abstrakcyjne i nieabstrakcyjne (metody, które są implementowane), ale interfejsy są w 100% abstrakcyjne (wszystkie te metody mają jedynie sygnaturę i nie mają implementacji). Co jednak, jeśli zamiast klasy potrzebujemy interfejsu i wspólnej funkcjonalności dla wszystkich zaimplementowanych klas? Ponieważ wtedy kod implementacyjny jest powtarzany wielokrotnie w każdej klasie implementującej interfejs. Aby tego uniknąć, w Java 8 dodano domyślne słowo kluczowe . Jeśli mamy metodę zaimplementowaną w interfejsie, to do tej metody należy przypisać słowo kluczowe default, w przeciwnym razie otrzymamy błąd wykonania.

Co to jest interfejs funkcjonalny?

Interfejsy funkcjonalne to nic innego jak interfejsy z jedną metodą abstrakcyjną i dowolną liczbą metod standardowych lub statycznych. Przykładem interfejsu funkcjonalnego jest Comparable, który ma jedną abstrakcyjną metodę CompareTo() . Z kolei Runnable ma metodę run() i tak dalej. Interfejs funkcjonalny możemy również przedstawić za pomocą adnotacji @FunctionalInterface. Zapewnia, że ​​interfejs ma tylko jedną abstrakcyjną metodę:
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //Имплементация
    }
   public default void method2(){
       //Имплементация
    }
}

Rodzaje interfejsów funkcjonalnych

Konsument - pobiera jeden argument i nic nie zwraca.
  • Trzy warianty Consumer to DoubleConsumer, IntConsumer i LongConsumer (w zależności od rodzaju akceptowanych argumentów).
  • Bi-Consumer - pobiera dwa argumenty i nic nie zwraca.
Predykat – pobiera jeden argument i zwraca wartość logiczną.
  • Trzy warianty Predicate to DoublePredicate, IntPredicate i LongPredicate (w zależności od rodzaju akceptowanych argumentów).
  • Bi-Predicate - pobiera dwa argumenty i zwraca wartość logiczną.
Funkcja - pobiera jeden argument i zwraca jedną wartość.
  • Wiele wersji funkcji jest dostępnych jako typy argumentów, przy czym najczęściej używane są int , long i double .
  • Bi-Function - pobiera dwa argumenty i zwraca jedną wartość.
  • Operatory Unary i Binary implementują odpowiednio Function i Bi-Function, ale dodatkowym warunkiem jest to, że dane wejściowe i wyjściowe muszą być identyczne i tego samego typu.
Dostawca — nie akceptuje żadnych danych wejściowych, ale zwraca pojedynczą wartość. Różne wersje dostawcy: BooleanSupplier, IntSupplier, LongSupplier i DoubleSupplier, dla których typy zwracane są odpowiednimi prymitywami.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION