Thread.currentThread în Java

currentThread() dă firul care rulează codul; getName() îi dă numele, iar isAlive() spune dacă firul încă rulează.

Sintaxă
static Thread currentThread()
final String getName()
final boolean isAlive()

Ce face Thread.currentThread

Thread.currentThread() returnează obiectul Thread care execută chiar linia respectivă. Așa afli, de exemplu, în ce fir rulează o metodă apelată din mai multe locuri. Firul principal al programului se numește main.

getName() returnează numele firului: cel dat la creare sau unul automat, de forma Thread-0, Thread-1. Firele virtuale nu au nume implicit (șir gol). isAlive() returnează true de la start() până când firul se termină; înainte de pornire și după terminare dă false.

Ce returnează

currentThread: un Thread. getName: un String. isAlive: boolean.

Exemple

Exemplul 1: Numele firelor

public class Main {
    static void raport(String mesaj) {
        System.out.println("[" + Thread.currentThread().getName() + "] " + mesaj);
    }

    public static void main(String[] args) throws InterruptedException {
        raport("pornesc programul");
        Thread facturi = new Thread(() -> raport("generez facturile"), "facturi");
        facturi.start();
        facturi.join();
        Thread fara = new Thread(() -> raport("fir fără nume dat"));
        fara.start();
        fara.join();
    }
}

Rezultat

[main] pornesc programul
[facturi] generez facturile
[Thread-0] fir fără nume dat

Exemplul 2: isAlive înainte, în timpul și după

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread export = new Thread(() -> {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }, "export");
        System.out.println("Înainte de start: " + export.isAlive());
        export.start();
        System.out.println("După start: " + export.isAlive());
        export.join();
        System.out.println("După join: " + export.isAlive());
    }
}

Rezultat

Înainte de start: false
După start: true
După join: false

Greșeli frecvente

  • Folosești isAlive() într-o buclă de așteptare (while (fir.isAlive()) {}): consumă procesorul degeaba. Folosește join().
  • Te bazezi pe numele automate (Thread-0) în logică: depind de ordinea în care au fost create firele. Dă nume explicite.

Comenzi înrudite

  • Thread: Un fir de execuție: cod care rulează în paralel cu restul programului. start() îl pornește, join() așteaptă să se termine.
  • Thread.sleep: sleep() oprește firul curent pentru un timp; interrupt() trimite unui fir semnalul să se oprească din așteptare.
  • Thread.ofVirtual: Creează fire virtuale (Java 21): fire foarte ușoare, gestionate de JVM, din care poți porni mii sau milioane.