Tidur dan tunggu adalah dua kaedah yang digunakan untuk multithreading di Jawa. Kaedah tidur tergolong dalam kelas Thread sementara kaedah tunggu adalah dari kelas Objek. The perbezaan utama antara tidur dan tunggu di Jawa ialah, tidur digunakan untuk menggantung pelaksanaan thread semasa untuk bilangan milisekon tertentu manakala kaedah menunggu digunakan untuk menyebabkan benang semasa menunggu sehingga satu lagi benang memanggil pemberitahuan atau memberitahu semua kaedah untuk objek.
Satu benang adalah unit pemproses terkecil dalam sistem operasi. Ia adalah satu aliran kawalan tunggal dalam satu program. Benang adalah ringan. Multithreading adalah mekanisme menjalankan pelbagai thread pada masa yang sama. Bahasa pengaturcaraan seperti Java menyokong multithreading. Multithreading mempunyai kelebihan kerana ia membolehkan untuk menjalankan pelbagai thread serentak dan benang bebas daripada satu sama lain. Ada kaedah di Java yang boleh digunakan untuk multithreading. Dua daripada mereka tidur dan menunggu.
1. Gambaran Keseluruhan dan Perbezaan Utama
2. Apa yang sedang tidur di Jawa
3. Apa yang menunggu di Jawa
4. Kesamaan Antara tidur dan menunggu di Jawa
5. Side by Side Comparison - tidur vs tunggu di Jawa dalam bentuk Tabular
6. Ringkasan
Terdapat banyak proses yang berjalan dalam sistem operasi. Proses adalah program dalam pelaksanaan. Setiap proses boleh mempunyai pelbagai thread, dan terdapat pertukaran konteks yang terjadi di antara benang-benang ini. Di Jawa, terdapat dua cara untuk membuat thread. Itulah dengan melanjutkan kelas thread atau dengan melaksanakan antara muka Runnable. Kelas Thread mempunyai pembina dan kaedah untuk membuat dan melaksanakan operasi pada benang. Kelas Thread memperluaskan kelas Objek dan melaksanakan antara muka Runnable. Antara muka Runnable harus dilaksanakan oleh mana-mana kelas yang mana keadaannya bertujuan untuk dilaksanakan oleh thread. Apabila thread dijalankan, kod yang perlu dilaksanakan ditulis di dalam kaedah run. Thread yang harus dijalankan dipilih oleh penjadual thread. Hanya satu thread yang berjalan dalam satu proses.
Satu thread melalui beberapa fasa. Selepas membuat objek kelas Thread, programmer boleh menggunakan kaedah permulaan. Sebelum menggunakan kaedah itu, benang dikatakan berada dalam keadaan baru. Penjadual thread memilih thread untuk dijalankan. Jika benang belum dipilih oleh penjadual thread tetapi jika kaedah permulaan dipanggil, maka benang berada dalam keadaan runnable. Selepas penjadual thread memilih thread untuk melaksanakan, ia transit ke menjalankan keadaan. Sekiranya benang masih hidup tetapi tidak layak untuk disiarkan, maka ia berada dalam keadaan yang tidak dapat disalurkan atau disekat. Setelah selesai kaedah larian, benang pergi ke keadaan yang ditamatkan. Ini adalah fasa utama siklus hidup thread.
Terdapat pelbagai kaedah yang tersedia dalam kelas thread untuk melaksanakan tugas yang berbeza. Kaedah tidur digunakan untuk tidur kaedah untuk masa tertentu. Sintaks untuk kaedah tidur adalah tidur kosong awam (milisaat panjang) membuang InterruptedException. Ia menyebabkan thread sedang melaksanakan untuk menghentikan sementara pelaksanaan untuk bilangan milisaat tertentu. Jika thread lain mengganggu thread semasa, status gangguan thread semasa dihapuskan apabila pengecualian ini dibuang.
Rajah 01: Program Java dengan Kaedah Tidur
Menurut program di atas, kaedah larian mengandungi kod yang perlu dilaksanakan. Dalam program utama, dua objek ContohThread1 dicipta, dan kaedah permulaan digunakan pada mereka. Itu akan membolehkan untuk menjalankan kod di dalam kaedah run. Hanya satu thread yang dilaksanakan pada satu masa. Dengan Thread. tidur (1000); akan membenarkan benang pertama untuk menamatkan pelaksanaan selama 1000 milisaat. Apabila thread sedang tidur, penjadual thread mengambil benang yang lain.
Pelbagai thread boleh mengakses sumber yang dikongsi. Ia boleh menyebabkan menghasilkan output yang salah. Penyegerakan thread boleh digunakan untuk membuat hanya satu thread untuk mengakses sumber yang dikongsi. Anggapkan situasi seperti berikut. Jika, terdapat dua benang sebagai t1 dan t2, t1 mula menyimpan nilai ke fail teks yang dipanggil Text1.txt. Nilai tersebut akan digunakan untuk beberapa pengiraan lain apabila t1 pulangan. Jika t2 bermula sebelum pulangan t1, t2 boleh mengubah nilai yang disimpan oleh t1. Ini boleh menyebabkan t1 memberikan output yang salah. Dengan bantuan penyegerakan, apabila t1 mula menggunakan fail Text1.txt, fail tersebut dapat dikunci, sehingga dapat diakses hanya oleh t1. T2 tidak dapat mengubahnya sehingga t1 melepaskan kunci untuk mengakses fail teks itu. Apabila tugas selesai t1 boleh melepaskan kunci. Kunci juga dikenali sebagai monitor.
Penyegerakan thread boleh dicapai melalui komunikasi antara thread. Bahagian penting ialah segmen kod yang mengakses sumber yang dikongsi. Dalam komunikasi inter-thread, thread dijeda berjalan di seksyen kritikal, dan benang lain dibenarkan masuk dalam seksyen kritis yang sama untuk dilaksanakan. Ia dilaksanakan menggunakan tunggu, memberitahu dan memberitahu semua kaedah. Mereka tergolong dalam kelas Objek. Kaedah tunggu digunakan untuk membolehkan benang semasa untuk melepaskan kunci dan tunggu sehingga satu lagi benang memanggil pemberitahuan atau memberitahu kaedah All untuk objek. Kaedah memberitahu digunakan untuk membuat satu thread yang sedang menunggu kunci. Pemberitahu Semua bangun semua benang yang sedang menunggu di kunci.
Rajah 02: Kelas Kalkulator
Rajah 03: Kaedah Utama
Kelas Kalkulator memanjangkan Thread. Blok disegerakkan berada di dalam kaedah larian. Kaedah gelung dan memberitahu adalah di dalam blok disegerakkan. Di dalam kaedah utama, contoh benang yang dibuat dan kaedah permulaan dipanggil pada contoh itu. Kaedah utama akan menunggu sehingga benang memberi pemberitahuan. Apabila melaksanakan program, kaedah utama menunggu sehingga keseluruhan pelaksanaan kaedah larian dan menunggu kaedah notifikasi. Setelah kaedah memberitahu dipanggil, kaedah utama berhenti menunggu dan mula melaksanakan sisa kod. Utama menunggu sehingga thread Kalkulator selesai. Akhirnya hasil hasilnya dicetak.
Sekiranya tiada blok yang disegerakkan dan jika kaedah utama mempunyai kod seperti di bawah, ia akan memberi keluaran sebagai sifar kerana ia tidak menunggu thread yang lain selesai.
Kalkulator t1 = Kalkulator baru ();
t1. mulakan ();
System.out.println (t1.sum);
tidur vs tunggu di Jawa | |
Kaedah tidur menyebabkan thread semasa untuk menggantung pelaksanaan untuk bilangan milisaat tertentu, tertakluk kepada ketepatan dan ketepatan pemasa sistem dan penjadual. | Kaedah menunggu menyebabkan thread semasa menunggu sehingga satu lagi benang memanggil pemberitahuan atau memberitahu kaedah All untuk objek. |
Persatuan dengan Kunci | |
Kaedah tidur tidak melepaskan kunci pada objek semasa penyegerakan. | Kaedah menunggu melepaskan kunci semasa penyegerakan. |
Kaedah Pelaksanaan | |
Kaedah tidur dijalankan pada benang semasa. | Kaedah tunggu dipanggil pada objek. |
Kelas Bersekutu | |
Tidur adalah kaedah kelas Thread. | Tunggu adalah kaedah kelas Object. |
Selesai | |
Proses tidur selesai selepas jumlah masa yang telah ditetapkan selesai. | Kaedah menunggu terganggu dengan memanggil pemberitahuan atau memberitahu semua kaedah. |
Terdapat banyak proses yang berjalan pada sistem operasi. Setiap proses boleh mempunyai pelbagai thread. Satu benang adalah unit pemproses terkecil dalam sistem operasi. Bahasa pemrogram Java menyokong multithreading. Ia membolehkan menjalankan pelbagai thread pada masa yang sama. Tidur dan tunggu adalah dua kaedah yang boleh digunakan ketika melaksanakan multi-threading. Perbezaan di antara tidur dan tunggu di Jawa adalah, tidur digunakan untuk menggantung pelaksanaan thread semasa untuk bilangan milisekon tertentu manakala kaedah tunggu digunakan untuk menyebabkan thread semasa menunggu sehingga satu lagi benang memanggil memberitahukan atau memberitahukanAll kaedah untuk objek tersebut.
1. "Inter-Thread Communication in Java - Javatpoint.". JavaTPoint. Terdapat di sini
2. Thread benang Komunikasi di Multithreading Java | Tutorial Java Teras | Studytonight. Terdapat di sini