JavaRush /Java Blog /Random-IT /Pausa caffè #159. Ciclo di vita di un thread in Java. Int...

Pausa caffè #159. Ciclo di vita di un thread in Java. Interfacce funzionali e metodi predefiniti in Java 8

Pubblicato nel gruppo Random-IT

Ciclo di vita di un thread in Java

Fonte: Medium Questo articolo discute i diversi stati del ciclo di vita dei thread in Java. Pausa caffè #159.  Ciclo di vita di un thread in Java.  Interfacce funzionali e metodi predefiniti in Java 8 - 1Il ciclo di vita di un thread in Java consiste principalmente di transizioni in vari stati, che iniziano con la nascita del thread e terminano con la terminazione del thread. Un thread è pronto per essere eseguito quando viene creato e avviato chiamando il metodo start() sulla classe Thread . Quando viene chiamato il metodo sleep() o wait() della classe Thread , il thread diventa inutilizzabile. Per gestire i thread a livello di codice, è importante identificare lo stato del thread. Capiamo come il ciclo di vita di un thread Java ne determina lo stato. Ecco cosa dice la documentazione Java a riguardo: un thread è un percorso di esecuzione del programma che può entrare in uno dei cinque stati durante il suo ciclo di vita:
  1. Nuovo
  2. Percorribile
  3. Corsa
  4. Bloccato
  5. Morto
1. Nuovo (stato neonato) si verifica quando crei un oggetto Thread nella classe Thread. Il flusso viene creato e si trova in uno stato “neonato”. Cioè, quando viene creato un thread, entra in un nuovo stato, ma il metodo start() non è stato ancora chiamato sull'istanza. 2. Percorribile. Questo stato significa che il thread è pronto per l'esecuzione. Quando il metodo start() viene chiamato su un nuovo thread, diventa pronto per essere avviato. In questo stato, il thread attende finché il processore non diventa disponibile (tempo della CPU). Cioè, il thread diventa una coda (serie) di thread in attesa di essere eseguita. 3. In esecuzione (stato di esecuzione). In esecuzione significa che il processore ha assegnato uno slot temporale per l'esecuzione del thread. Questo è lo stato in cui il thread svolge la sua funzione effettiva. 4. Bloccato (stato bloccato). Un thread è in uno stato bloccato quando è in pausa, dorme o attende qualche tempo per soddisfare una determinata condizione. 5. Stato morto. Questa condizione si verifica quando il metodo run() termina l'esecuzione delle istruzioni. Il thread si interrompe automaticamente o entra nello stato morto. In altre parole, quando un thread esce dal metodo run() , termina o diventa inattivo.

Interfacce funzionali e metodi predefiniti in Java 8

Fonte: Medium In questo articolo imparerai alcune delle modifiche introdotte in Java 8, ovvero interfacce funzionali e metodi predefiniti.

Quali sono i metodi predefiniti?

Sappiamo che le classi astratte possono avere metodi astratti e non astratti (metodi implementati), ma le interfacce sono astratte al 100% (tutti questi metodi hanno solo una firma e nessuna implementazione). Ma cosa succede se abbiamo bisogno di un'interfaccia invece di una classe e di funzionalità comuni a tutte le classi implementate? Perché in questo caso il codice di implementazione viene ripetuto ancora e ancora in ogni classe che implementa l'interfaccia. Per evitare ciò, Java 8 ha aggiunto la parola chiave predefinita . Se abbiamo un metodo implementato in un'interfaccia, allora la parola chiave predefinita deve essere assegnata a quel metodo, altrimenti otterremo un errore di runtime.

Cos'è un'interfaccia funzionale?

Le interfacce funzionali non sono altro che interfacce con un metodo astratto e un numero qualsiasi di metodi standard o statici. Un esempio di interfaccia funzionale è Comparable, che ha un metodo astratto, compareTo() . A sua volta, Runnable ha un metodo run() e così via. Possiamo anche rappresentare un'interfaccia funzionale utilizzando l'annotazione @FunctionalInterface. Garantisce che un'interfaccia abbia un solo metodo astratto:
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //Имплементация
    }
   public default void method2(){
       //Имплементация
    }
}

Tipi di interfacce funzionali

Consumatore : accetta un argomento e non restituisce nulla.
  • Le tre varianti di Consumer sono DoubleConsumer, IntConsumer e LongConsumer (a seconda del tipo di argomenti accettati).
  • Bi-Consumer: accetta due argomenti e non restituisce nulla.
Predicato : accetta un argomento e restituisce un valore booleano.
  • Le tre varianti di Predicate sono DoublePredicate, IntPredicate e LongPredicate (a seconda del tipo di argomenti accettati).
  • Bi-predicato: accetta due argomenti e restituisce un valore booleano.
Funzione : accetta un argomento e restituisce un valore.
  • Molte versioni di funzioni sono disponibili come tipi di argomenti, di cui int , long e double sono quelli più comunemente utilizzati.
  • Bifunzione: accetta due argomenti e restituisce un valore.
  • Gli operatori Unario e Binario implementano rispettivamente Funzione e Bi-Funzione, ma la condizione aggiuntiva qui è che l'input e l'output devono essere identici e dello stesso tipo.
Fornitore : non accetta alcun input ma restituisce un singolo valore. Varie versioni di Supplier: BooleanSupplier, IntSupplier, LongSupplier e DoubleSupplier, per le quali i tipi restituiti sono le primitive corrispondenti.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION