Pengenalan Status Thread Java dengan Contoh – Siklus Hidup Thread
Diterbitkan: 2019-01-11
Status Benang
Diagram berikut mengilustrasikan berbagai status di mana utas Java dapat berada di titik mana pun selama masa pakainya dan pemanggilan metode mana yang menyebabkan transisi ke status lain. Diagram ini bukan diagram keadaan hingga yang lengkap, melainkan gambaran umum tentang aspek yang lebih menarik dan umum dari kehidupan thread.
Anda berada di tempat yang tepat jika Anda memiliki pertanyaan di bawah ini:
- Siklus Hidup Thread di Java
- Siklus Hidup dan Status Thread di Java
- Memahami Java Thread States
Sisa halaman ini membahas Thread's life cycle
dalam hal statusnya.

Utas Baru
Pernyataan berikut membuat utas baru tetapi tidak memulainya sehingga meninggalkan utas dalam status berlabel Utas Baru dalam diagram.
1 |
Thread myThread = new MyThreadClass ( ) ; |
Ketika sebuah utas dalam status New Thread
, itu hanyalah objek Utas kosong. Belum ada sumber daya sistem yang dialokasikan untuk itu. Jadi ketika sebuah utas dalam keadaan ini, Anda hanya dapat memulai utas atau menghentikannya; memanggil metode lain selain start()
atau stop()
saat utas dalam status ini tidak masuk akal dan menyebabkan IllegalThreadStateException.
Dapat dijalankan
Sekarang perhatikan dua baris kode ini:
1 2 |
Thread myThread = new MyThreadClass ( ) ; myThread . start ( ) ; |
Metode start()
membuat sumber daya sistem yang diperlukan untuk menjalankan utas, menjadwalkan utas untuk dijalankan, dan memanggil metode run()
utas. Pada titik ini utas dalam status "Dapat dijalankan". Status ini disebut "Runnable" daripada "Running" karena utas mungkin tidak benar-benar berjalan saat dalam status ini. Banyak komputer memiliki satu prosesor sehingga tidak mungkin untuk menjalankan semua utas yang "Dapat Dijalankan" secara bersamaan.
Jadi, sistem runtime Java harus menerapkan skema penjadwalan yang membagi prosesor di antara semua utas yang "Dapat Dijalankan". Namun, untuk sebagian besar tujuan, Anda dapat menganggap status "Dapat dijalankan" hanya sebagai "Berjalan". Ketika sebuah utas sedang berjalan–itu “Dapat Dijalankan” dan merupakan utas saat ini–instruksi dalam run()
dijalankan secara berurutan.
Tidak Dapat Dijalankan
Sebuah utas memasuki status Not Runnable
saat salah satu dari empat peristiwa ini terjadi:
- seseorang memanggil metode
suspend()
nya - seseorang memanggil metode
sleep()
nya - utas menggunakan metode
wait()
untuk menunggu pada variabel kondisi - utas memblokir I/O.
Misalnya, garis tebal dalam cuplikan kode ini
1 2 3 4 5 6 |
Thread myThread = new MyThreadClass ( ) ; myThread . start ( ) ; try { myThread . sleep ( 10000 ) ; } catch ( InterruptedException e ) { } |
membuat myThread
tertidur selama 10 detik (10.000 milidetik). Selama 10 detik itu, bahkan jika prosesor tersedia myThread
tidak akan berjalan. Setelah 10 detik, myThread
menjadi "Runnable" lagi dan sekarang jika prosesor tersedia myThread
akan berjalan.
Untuk setiap "pintu masuk" ke status "Tidak Dapat Dijalankan" yang tercantum di atas, ada rute pelarian khusus dan berbeda yang mengembalikan utas ke status "Dapat Dijalankan". Rute pelarian hanya berfungsi untuk "pintu masuk" yang sesuai. Misalnya, jika utas telah ditidurkan, maka jumlah milidetik yang ditentukan harus berlalu sebelum utas menjadi "Dapat Dijalankan" lagi. Memanggil resume()
pada utas tidur tidak berpengaruh.
Berikut ini menunjukkan rute pelarian untuk setiap pintu masuk ke status "Tidak Dapat Dijalankan".
- Jika utas telah ditidurkan, maka jumlah milidetik yang ditentukan harus berlalu.
- Jika sebuah utas telah ditangguhkan, maka seseorang harus memanggil metode
resume()
-nya. - Jika utas menunggu pada variabel kondisi, objek apa pun yang memiliki variabel harus melepaskannya dengan memanggil
notify()
ataunotifyAll()
. - Jika utas diblokir pada I/O, maka perintah I/O yang ditentukan harus selesai.

Mati
Sebuah utas dapat mati dengan dua cara: baik karena sebab alami, atau karena dibunuh (dihentikan). Sebuah utas mati secara alami ketika metode run()
-nya keluar secara normal. Misalnya, perulangan while
dalam metode ini adalah perulangan berhingga–itu akan berulang 100 kali dan kemudian keluar.

1 2 3 4 5 6 7 |
public void run ( ) { int i = 0 ; while ( i < 100 ) { i ++ ; System . out . println ( "i = " + i ) ; } } |
Sebuah thread dengan metode run()
ini akan mati secara alami setelah loop dan metode run()
selesai.
Anda juga dapat mematikan utas kapan saja dengan memanggil metode stop()
-nya. Cuplikan kode ini.
1 2 3 4 5 6 7 |
Thread myThread = new MyThreadClass ( ) ; myThread . start ( ) ; try { Thread . currentThread ( ) . sleep ( 10000 ) ; } catch ( InterruptedException e ) { } myThread . stop ( ) ; |
membuat dan memulai myThread
kemudian menempatkan utas saat ini ke mode tidur selama 10 detik. Ketika utas saat ini bangun, garis tebal di segmen kode membunuh myThread
.
Metode stop()
melempar objek ThreadDeath ke utas untuk mematikannya. Jadi, ketika sebuah utas dimatikan dengan cara ini, ia mati secara tidak sinkron. Utas akan mati ketika benar-benar menerima pengecualian ThreadDeath.
IllegalThreadStateException
Sistem runtime melontarkan IllegalThreadStateException saat Anda memanggil metode pada utas dan status utas tersebut tidak mengizinkan pemanggilan metode tersebut. Misalnya, IllegalThreadStateException dilempar saat Anda memanggil suspend()
pada utas yang tidak "Dapat Dijalankan".
Seperti yang ditunjukkan dalam berbagai contoh utas sejauh ini dalam pelajaran ini, saat Anda memanggil metode utas yang dapat melempar pengecualian, Anda harus menangkap dan menangani pengecualian, atau mendeklarasikan bahwa metode panggilan melempar pengecualian yang tidak tertangkap.
Metode isAlive()
Dan kata terakhir tentang status utas: antarmuka pemrograman untuk kelas Thread menyertakan metode yang disebut isAlive()
. isAlive()
mengembalikan nilai true jika utas telah dimulai dan tidak dihentikan. Jadi, jika metode isAlive()
mengembalikan false , Anda tahu bahwa utasnya adalah "Utas Baru" atau "Mati".
Jika metode isAlive()
mengembalikan true , Anda tahu bahwa utasnya adalah “Runnable” atau “Not Runnable”. Anda tidak dapat membedakan antara utas "Utas Baru" dan utas "Mati"; Anda juga tidak dapat membedakan antara utas "Dapat dijalankan" dan utas "Tidak Dapat Dijalankan".
Saat melihat contoh utas yang rumit, temukan tutorial yang sangat bagus ini di internet. Semua orang harus membaca ini dengan seksama.