Pengenalan Status Thread Java dengan Contoh – Siklus Hidup Thread

Diterbitkan: 2019-01-11
Pengenalan Status Utas Java dengan Contoh

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.

Status Utas Java dengan Contoh

Utas Baru

Pernyataan berikut membuat utas baru tetapi tidak memulainya sehingga meninggalkan utas dalam status berlabel Utas Baru dalam diagram.

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:

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

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() atau notifyAll() .
  • Jika utas diblokir pada I/O, maka perintah I/O yang ditentukan harus selesai.
java-thread-tutorial

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.

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.

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.