Ketika utas dibuat dan dimulai, tidak ada yang memasuki keadaan eksekusi segera setelah dimulai atau selalu dalam keadaan eksekusi. Selama siklus hidupnya, ia harus melewati lima negara: "baru", "runnable", "running", "blocked" dan "dead". Setelah utas dibuat, tidak mungkin untuk menempati CPU dan dijalankan secara mandiri. Perlu beralih di antara beberapa utas, sehingga beralih antara menjalankan dan memblokir sebagian besar waktu.
1. Keadaan utas
Ada beberapa keadaan berbeda dari keberadaan utas, sebagai berikut:
1. Status Baru
Keadaan baru adalah keadaan di mana utas telah dibuat tetapi belum mulai berjalan. Keadaan ini memungkinkan utas untuk dijalankan dengan memanggil metode start () utas.
2. Status Runnable
Keadaan runnable dapat disebut status berjalan persiapan atau antrian. Keadaan ini dapat memungkinkan utas untuk dijalankan dengan memanggil metode start () dari utas.
Penjadwal utas menentukan utas mana yang akan dijalankan dan berapa lama utas akan berjalan.
3. Status Menjalankan
Jika utas dieksekusi, itu dalam keadaan berjalan.
4. Status mati
Setelah utas memasuki keadaan mati, ia tidak bisa lagi berjalan.
5. Status yang tidak dapat dijalankan
Java Virtual Machine JVM mengeksekusi utas sesuai dengan prinsip prioritas dan penjadwalan utas.
2. Penjadwal Thread
Di JVM, implementasi penjadwal utas biasanya didasarkan pada dua strategi berikut:
Strategi Penjadwalan Preemptive Strategi Penjadwalan Pembagian Waktu atau Strategi Penjadwalan Round-Robin
Implementasi penjadwal utas adalah platform-independen, sehingga penjadwalan utas tidak dapat diprediksi.
3. Prioritas utas
JVM memberikan prioritas untuk setiap utas yang baru dibuat.
Level 0: Ini adalah prioritas terendah
Level 5: Ini adalah prioritas normal
Level 10: Ini adalah prioritas tertinggi
Untuk menyimpan nilai -nilai ini, kelas utas memiliki tiga variabel yang sesuai:
Sebuah utas pertama -tama akan mewarisi prioritas utas induknya. Prioritas default dari masing -masing utas adalah level 5 (prioritas normal), dan prioritas default utas utama adalah level 5.
Prioritas utas dapat diatur melalui metode SetPriority (int prioritas).
public final void setPriority (int prioritas)
public void getPriority ();
Utas yang ditentukan pengguna memiliki utas utas default Nomor Urutan+ Urutan, dan Nomor Urutan dimulai dari 0, seperti utas pertama adalah Thread0.
Nama utas dapat diatur melalui metode SetName (String Name), dan nama utas dapat diperoleh dengan menggunakan metode getName ().
setname public final void (nama string)
GetName String Akhir Publik ().
Contoh
Mari kita lihat contoh di bawah ini:
paket demo.ch; kelas publik userthread memperluas thread {userthread () {super (); } Userthread (nama string) {super (name); } public void run () {System.out.println ("Thread mulai berjalan .."); } public static void main (string [] args) {userthread thread1 = Userthread baru ("thread1"); Userthread thread2 = UserThread baru ("thread2"); System.out.println ("Thread 1 nama awal dan prioritas"); System.out.println ("Nama:" + thread1.getName ()); System.out.println ("Prioritas:" + thread1.getPriority ()); System.out.println ("Thread 2 Nama Awal dan Prioritas"); System.out.println ("Nama:" + thread2.getPriority ()); System.out.println ("Prioritas:" + Thread2.getPriority ()); System.out.println (""); thread1.setpriority (6); thread2.setpriority (9); System.out.println ("Thread 1 nama awal dan prioritas"); System.out.println ("Nama:" + thread1.getName ()); System.out.println ("Prioritas:" + thread1.getPriority ()); System.out.println ("Thread 2 Nama Awal dan Prioritas"); System.out.println ("Nama:" + thread2.getname ()); System.out.println ("Prioritas:" + Thread2.getPriority ()); System.out.println (""); thread1.start (); thread2.start (); untuk (int i = 0; i <5; i ++) system.out.println ("Metode utama I Nilai:"+i); }}Hasil output:
Thread 1 initial name and priority name:Thread1priority:5Thread 2 initial name and priority name:Thread2priority:5Thread 1 initial name and priority name:Thread1priority:6Thread 2 initial name and priority name:Thread2priority:9main method i value: 0main method i value: 1thread started running..main method i value: 2thread started running..main method i value: 3main method i value: 4
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!