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ștejoin(). - 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.