Jadual Kandungan
1. Rajah keadaan benang
2. Nyatakan penerangan terperinci
1
4. Status baris gilir penyegerakan
5. Perbandingan beberapa kaedah
Rumah Java JavaAsas Terdapat beberapa keadaan benang di java

Terdapat beberapa keadaan benang di java

Nov 24, 2022 pm 04:03 PM
java

Java mempunyai 6 keadaan urutan: awal (BARU), berjalan (BOLEH DIJALANKAN), disekat (DISEKAT), menunggu (MENUNGGU), menunggu tamat masa (TIMED_WAITING) dan ditamatkan (DITUTUP). Gunakan kata kunci baharu untuk mencipta utas baharu, tetapi kaedah mula() belum dipanggil Benang berada dalam keadaan yang disekat menunjukkan bahawa utas sedang menunggu kunci monitor dan terperangkap dalam keadaan; benang yang memasuki keadaan menunggu perlu menunggu urutan lain membuat keputusan Beberapa tindakan tertentu (pemberitahuan atau gangguan).

Terdapat beberapa keadaan benang di java

Persekitaran pengendalian tutorial ini: sistem windows7, versi java8, komputer Dell G3.

Status benang dalam Java dibahagikan kepada 6 jenis:

1. Awal (BARU): Objek urutan baharu dicipta, tetapi kaedah mula() belum dipanggil lagi.
2. RUNNABLE: Dalam benang Java, dua keadaan sedia dan berjalan biasanya dipanggil "berjalan".
Selepas objek utas dicipta, utas lain (seperti utas utama) memanggil kaedah mula() objek. Benang dalam keadaan ini terletak dalam kolam benang boleh jalan, menunggu untuk dipilih mengikut penjadualan benang untuk mendapatkan hak untuk menggunakan CPU Pada masa ini, ia berada dalam keadaan sedia. Benang dalam keadaan sedia akan berjalan selepas mendapatkan kepingan masa CPU.
3. DISEKAT: Menunjukkan bahawa benang disekat dalam kunci.
4. MENUNGGU: Urutan yang memasuki keadaan ini perlu menunggu urutan lain untuk mengambil beberapa tindakan tertentu (pemberitahuan atau gangguan).
5. Waiting tamat masa (TIMED_WAITING) : Keadaan ini berbeza daripada WAITING, ia boleh kembali dengan sendirinya selepas masa yang ditetapkan.
6. DITAMATKAN (DITAMATKAN) : Menunjukkan bahawa urutan telah selesai dilaksanakan.

6 keadaan ini ditakrifkan dalam penghitungan Negeri bagi kelas Thread Anda boleh melihat kod sumber untuk surat-menyurat satu dengan satu.

1. Rajah keadaan benang

Terdapat beberapa keadaan benang di java

2. Nyatakan penerangan terperinci

1

Melaksanakan antara muka Runnable dan mewarisi Thread boleh mendapatkan kelas thread Apabila tika baharu keluar, thread memasuki keadaan awal.

2.1. Keadaan sedia (READY of RUNNABLE)

  • Keadaan sedia hanya bermakna anda layak untuk berlari pilih anda, anda akan Sentiasa

    Bersedia.

  • Panggil kaedah mula() utas, dan utas memasuki keadaan

    Sedia.

  • Kaedah sleep() bagi utas semasa tamat, dan kaedah join() bagi utas lain tamat Selepas input pengguna selesai, utas mendapat kunci objek, dan ini benang juga akan memasuki

    SediaStatus.

  • Pisahan masa utas semasa telah digunakan, kaedah hasil() utas semasa dipanggil dan utas semasa memasuki keadaan

    Sedia.

  • Selepas benang dalam kolam kunci memperoleh kunci objek, ia memasuki keadaan

    Sedia.

2.2 Keadaan berjalan (RUNNABLE of RUNNING)

Thread apabila penjadual thread memilih thread daripada runnable pool sebagai thread semasa negeri di mana ia berada. Ini juga satu-satunya cara untuk benang memasuki keadaan berjalan.

3. Keadaan disekat (DISEKAT)

Keadaan menyekat ialah keadaan apabila benang menyekat apabila memasuki kaedah atau blok kod (memperoleh kunci) diubah suai oleh kata kunci disegerakkan.

4. Menunggu

(MENUNGGU)

Benang dalam keadaan ini tidak akan diperuntukkan masa pelaksanaan CPU Keadaan menunggu yang tidak pasti.

5. Masa menunggu tamat

(TIMED_WAITING)

Sesuatu urutan dalam keadaan ini tidak akan diperuntukkan masa pelaksanaan CPU, tetapi tidak perlu menunggu selama-lamanya untuk dikejutkan dengan jelas oleh benang lain , mereka akan bangun secara automatik selepas masa tertentu.

6. Status penamatan (TAMAT)

  • Apabila kaedah run() benang selesai, atau kaedah utama() bagi utas utama telah selesai, kami menganggapnya telah ditamatkan. Objek benang ini mungkin masih hidup, tetapi ia bukan lagi benang yang dilaksanakan secara berasingan. Sebaik sahaja benang ditamatkan, ia tidak boleh dihidupkan semula.

  • Memanggil kaedah mula() pada urutan yang ditamatkan akan membuang pengecualian java.lang.IllegalThreadStateException.

3. Beratur menunggu

    Sebelum memanggil kaedah tunggu() dan maklumkan() obj, kunci obj mesti diperolehi, iaitu, ia mesti ditulis dalam synchronized( obj) dalam segmen kod.
  • Langkah dan gambar rajah yang berkaitan dengan baris gilir menunggu

Terdapat beberapa keadaan benang di java

  • Benang 1 memperoleh kunci objek A dan menggunakan objek A .

  • Benang 1 memanggil kaedah tunggu() objek A.

  • Benang 1 melepaskan kunci objek A dan serta-merta memasuki baris gilir menunggu.

  • Objek dalam kolam kunci bersaing untuk mengunci objek A.

  • Benang 5 memperoleh kunci objek A, memasuki blok yang disegerakkan dan menggunakan objek A.

  • Thread 5 memanggil kaedah notifyAll() objek A, membangunkan semua thread dan semua thread memasuki baris gilir penyegerakan. Jika thread 5 memanggil kaedah notify() objek A, thread akan dibangkitkan Tidak diketahui siapa yang akan dibangkitkan dan thread yang dibangkitkan akan memasuki baris gilir penyegerakan.

  • Lokasi disegerakkan kaedah notifyAll() tamat dan urutan 5 melepaskan kunci objek A.

  • Benang dalam baris gilir penyegerakan bersaing untuk mengunci objek, tetapi tidak diketahui bila benang 1 boleh merebutnya.

4. Status baris gilir penyegerakan

  • Apabila urutan semasa ingin memanggil kaedah penyegerakan objek A, ia mendapati bahawa kunci objek A telah dikunci oleh benang, pada masa ini benang semasa memasuki baris gilir penyegerakan. Ringkasnya, baris gilir penyegerakan mengandungi benang yang ingin bersaing untuk kunci objek.
  • Apabila utas 1 dibangkitkan oleh utas lain 2, utas 1 memasuki baris gilir penyegerakan untuk bersaing memperebutkan kunci objek.
  • Baris Gilir Penyegerakan ialah konsep yang hanya wujud dalam persekitaran yang disegerakkan bersamaan dengan Baris Gilir Penyegerakan.
  • Selepas masa menunggu benang tamat atau dibangkitkan oleh notify/notifyAll, ia akan memasuki baris gilir penyegerakan untuk bersaing untuk kunci Jika ia memperoleh kunci, ia akan memasuki keadaan RUNNABLE, jika tidak ia akan masuk keadaan TERSEKAT dan tunggu untuk mendapatkan kunci.

5. Perbandingan beberapa kaedah

  • Thread.sleep(long millis), kaedah ini mesti dipanggil oleh thread semasa . Benang semasa memasuki keadaan TIMED_WAITING tetapi tidak melepaskan kunci objek Selepas millis, benang secara automatik bangun dan memasuki keadaan sedia. Peranan: Cara terbaik untuk memberi peluang kepada urutan lain untuk dilaksanakan.

  • Thread.yield(), kaedah ini mesti dipanggil oleh thread semasa Thread semasa menyerahkan kepingan masa CPU yang diperoleh, tetapi tidak melepaskan sumber kunci dan berubah daripada keadaan berjalan ke keadaan sedia OS memilih benang sekali lagi. Fungsi: Biarkan utas dengan keutamaan yang sama dilaksanakan secara bergilir-gilir, tetapi tidak ada jaminan bahawa ia akan dilaksanakan secara bergilir-gilir. Dalam amalan, tiada jaminan bahawa yield() akan mencapai tujuan yield, kerana yield thread mungkin dipilih semula oleh thread scheduler. Thread.yield() tidak menyebabkan penyekatan. Kaedah ini serupa dengan sleep(), kecuali pengguna tidak boleh menentukan berapa lama untuk berhenti seketika.

  • thread.join()/thread.join(long millis), thread semasa memanggil kaedah cantuman thread lain t dan thread semasa memasuki WAITING/Keadaan TIMED_WAITING , benang semasa tidak akan melepaskan kunci objek yang telah dipegang. Apabila utas t menyelesaikan pelaksanaan atau masa millis tamat, utas semasa biasanya memasuki keadaan RUNNABLE, dan mungkin juga memasuki keadaan DISEKAT (kerana gabungan dilaksanakan berdasarkan menunggu).

  • obj.wait(), benang semasa memanggil kaedah tunggu() objek, benang semasa melepaskan kunci objek dan memasuki baris gilir menunggu. Bergantung pada notify()/notifyAll() untuk bangun atau tunggu(lama masa) untuk bangun secara automatik apabila tamat masa tamat.

  • obj.notify() membangunkan satu urutan menunggu pada monitor objek ini. notifyAll() membangunkan semua benang menunggu pada monitor objek ini.

  • LockSupport.park()/LockSupport.parkNanos(long nanos),LockSupport.parkHingga(tarikh akhir yang panjang), urutan semasa memasuki keadaan MENUNGGU/TIMED_WAITING. Berbanding dengan kaedah tunggu, benang boleh memasuki keadaan WAITING/TIMED_WAITING tanpa mendapatkan kunci dan perlu dibangkitkan melalui LockSupport.unpark (Benang benang).

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengajaran Pengaturcaraan! !

Atas ialah kandungan terperinci Terdapat beberapa keadaan benang di java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Oct 13, 2024 pm 01:32 PM

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.

See all articles