EN tråd i Java kan eksistere i en af følgende tilstande til enhver tid. En tråd ligger kun i en af de viste tilstande på et hvilket som helst tidspunkt:
- Ny stat
- Kørbar tilstand
- Blokeret tilstand
- Ventetilstand
- Tidsbestemt ventetilstand
- Opsagt stat
Diagrammet nedenfor repræsenterer forskellige tilstande af en tråd på ethvert tidspunkt:

En tråds livscyklus
Der er flere tilstande af tråden i en livscyklus som nævnt nedenfor:
- Ny tråd: Når en ny tråd oprettes, er den i ny stat . Tråden er endnu ikke begyndt at køre, når tråden er i denne tilstand. Når en tråd ligger i den nye tilstand, er dens kode endnu ikke kørt og er ikke begyndt at køre.
- Kørbar tilstand : En tråd altså klar til at køre flyttes til en kørebar tilstand. I denne tilstand kan en tråd faktisk køre, eller den kan være klar til at køre på ethvert tidspunkt. Det er trådplanlæggerens ansvar at give tråden tid til at køre. Et flertrådet program tildeler en fast mængde tid til hver enkelt tråd. Hver eneste tråd får en lille mængde tid til at køre. Efter at have kørt et stykke tid holder en tråd pause og opgiver CPU'en, så andre tråde kan køre.
- Blokeret: Tråden vil være i blokeret tilstand når den forsøger at anskaffe en lås men i øjeblikket er låsen erhvervet af den anden tråd. Tråden vil flytte fra blokeret tilstand til kørebar tilstand, når den får låsen.
- Ventetilstand : Tråden vil være i ventetilstand når den kalder vent() metode eller join() metode. Det vil flytte til den kørebare tilstand, når en anden tråd vil give besked, eller den tråd vil blive afsluttet.
- Tidsbestemt venter : En tråd ligger i en tidsindstillet ventetilstand, når den kalder en metode med en timeout-parameter . En tråd ligger i denne tilstand, indtil timeoutet er fuldført, eller indtil en meddelelse modtages. For eksempel når en tråd kalder søvn eller en betinget ventetid, flyttes den til en tidsbestemt ventetilstand.
- Afsluttet tilstand: En tråd afsluttes på grund af en af følgende årsager:
- Fordi den forlader normalt. Dette sker, når koden til tråden er blevet fuldstændig udført af programmet.
- Fordi der opstod en usædvanlig fejlbegivenhed som en segmenteringsfejl eller en uhåndteret undtagelse.
Trådtilstande i Java
I Java for at få den aktuelle tilstand af tråden brug Thread.getState() metode til at få den aktuelle tilstand af tråden. Java giver java.lang.Thread.State enum, der definerer ENUM-konstanterne for tilstanden af en tråd, som et resumé af det er givet nedenfor:
1. Nyt
Trådtilstand for en tråd, der endnu ikke er startet.
java escape karakter
offentlig statisk endelig tråd.State NY
2. Kørbar
Trådtilstand for en løbbar tråd. En tråd i den kørebare tilstand udføres i den virtuelle Java-maskine, men den venter muligvis på andre ressourcer fra operativsystemet, såsom en processor.
offentlig statisk endelig Tråd.State KØRBAR
3. Blokeret
Trådtilstand for en tråd blokeret, der venter på en skærmlås. En tråd i blokeret tilstand venter på, at en monitorlås går ind i en synkroniseret blok/metode eller genindsætter en synkroniseret blok/metode efter opkald Object.wait().
offentlig statisk endelig tråd.State BLOKERT
4. Venter
Trådtilstand for en ventende tråd. En tråd er i ventetilstand på grund af opkald til en af følgende metoder:
- Object.wait uden timeout
- Tråd.tilslut uden timeout
- LockSupport.park
offentlig statisk endelig Tråd.Stat VENTER
5. Tidsbestemt ventetid
Trådtilstand for en ventende tråd med en specificeret ventetid. En tråd er i tidsindstillet ventetilstand på grund af opkald til en af følgende metoder med en specificeret positiv ventetid:
- Tråd.søvn
- Object.wait med timeout
- Thread.join med timeout
- LockSupport.parkNanos
- LockSupport.parkIndtil
offentlig statisk endelig tråd.State TIMED_WAITING
array.sort i java
6. Afsluttet
Trådtilstand for en afsluttet tråd. Tråden har afsluttet eksekveringen.
offentlig statisk endelig Tråd.State OPSÅET
Eksempel på demonstration af trådtilstande
Nedenfor er et eksempel fra den virkelige verden på et billetbestillingssystem, der viser forskellige trådtilstande:
Eksempel:
Java// Java program to demonstrate thread states // using a ticket booking scenario class TicketBooking implements Runnable { @Override public void run() { try { // Timed waiting Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State of bookingThread while mainThread is waiting: ' + TicketSystem.mainThread.getState()); try { // Another timed waiting Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } public class TicketSystem implements Runnable { public static Thread mainThread; public static TicketSystem ticketSystem; @Override public void run() { TicketBooking booking = new TicketBooking(); Thread bookingThread = new Thread(booking); System.out.println('State after creating bookingThread: ' + bookingThread.getState()); bookingThread.start(); System.out.println('State after starting bookingThread: ' + bookingThread.getState()); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State after sleeping bookingThread: ' + bookingThread.getState()); try { // Moves mainThread to waiting state bookingThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println('State after bookingThread finishes: ' + bookingThread.getState()); } public static void main(String[] args) { ticketSystem = new TicketSystem(); mainThread = new Thread(ticketSystem); System.out.println('State after creating mainThread: ' + mainThread.getState()); mainThread.start(); System.out.println('State after starting mainThread: ' + mainThread.getState()); } }
cassidy hutchinson uddannelse
Produktion:
Forklaring:
- Når en ny tråd oprettes, er tråden i tilstanden NY. Når start()-metoden kaldes på en tråd, flytter trådplanlæggeren den til tilstanden Runnable.
- Hver gang join()-metoden kaldes på en trådforekomst, går hovedtråden til Venter på, at bookingtråden er fuldført.
- Når trådens kørselsmetode er fuldført, bliver dens tilstand afsluttet.