Terdapat beberapa keadaan benang di 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).
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
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.
- 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
- 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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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

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

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

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

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

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.

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.
