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.
Bersedia.
Sedia.
SediaStatus.
Sedia.
Sedia.
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.
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!