Carta Perbandingan
Asas untuk Perbandingan | tidur | tunggu |
---|---|---|
Asas | Kaedah tidur tidak melepaskan kunci pada objek sehingga ia terganggu. | Tunggu kaedah melepaskan kunci pada objek untuk membiarkan objek lain dilaksanakan sehingga memberitahu atau memberitahu kaedah Semua digunakan. |
Kelas | Kaedah tidur ditakrifkan dalam kelas Thread. | Tunggu kaedah ditakrifkan dalam kelas Objek. |
Disegerakkan | Kaedah tidur tidak perlu dipanggil dalam konteks Disegerakkan. | Kaedah tunggu harus dipanggil dalam konteks Disegerakkan. |
Selesai | Pelaksanaan kaedah tidur diselesaikan apabila benang mengganggu atau masa kaedah tidur tamat tempoh. | Tunggu pelaksanaan kaedah selesai apabila memberitahu () atau memberitahu semua () kaedah mengganggu. |
Statik | Kaedah tidur adalah kaedah statik. | Kaedah tunggu tidak statik sebab itu ia memerlukan objek untuk memanggilnya. |
Pelaksanaan | Kaedah tidur dijalankan pada benang semasa. | Kaedah menunggu dilaksanakan pada objek. |
Pengecualian | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException. |
Definisi Kaedah Tidur
Kaedah tidur adalah kaedah statik kelas Thread . Kaedah tidur dipanggil apabila benang tidak mahu melakukan apa-apa tugas untuk masa tertentu. Kaedah tidur melengkapkan pelaksanaan sama ada apabila masa kaedah tersebut tamat, atau ia terganggu oleh beberapa benang lain dalam pelaksanaannya. Selepas kaedah tidur telah selesai, benang sekali lagi mendapat status lariannya. Terdapat dua dari kaedah tidur seperti ditunjukkan di bawah.
tidur void asli statik awam (milisaat panjang); tidur kosong statik awam (milisaat panjang dan nanodetik int);
Dalam dua bentuk di atas, anda boleh memerhatikan masa yang disebutkan dalam kedua-dua bentuk kaedah tidur. Ini kerana thread sentiasa tidur untuk masa tertentu yang dinyatakan dalam parameter. Kaedah tidur boleh diganggu oleh mana-mana benang lain semasa pelaksanaannya; Oleh itu, ia boleh membuang InterruptedExecption. Anda harus berhati-hati bahawa pengecualian itu ditangani sama ada dengan mencuba / menangkap blok atau dengan kata kunci Lemparkan sebaliknya, ia akan membawa kepada ralat masa kompilasi. Kaedah tidur memegang kunci pada objek semasa dalam pelaksanaan dan tidak membenarkan objek lain dilaksanakan sehingga selesai pelaksanaannya.
Takrif Kaedah Tunggu
Tunggu adalah kaedah yang ditakrifkan dalam kelas Objek . Kaedah tunggu digunakan apabila beberapa tugas (thread) bergelut untuk sumber yang sama satu demi satu. Kaedah tunggu apabila dipanggil ia melepaskan kunci pada objek yang telah menggunakan kaedah menunggu. Dan berikan peluang kepada objek lain untuk dilaksanakan sehingga kaedah memberitahu digunakan lagi untuk meneruskan kunci pada objek yang dikeluarkan oleh cara tunggu. Kaedah tunggu mempunyai bentuk berikut.
tunggu (); tunggu (milisaat panjang); tunggu (milisaat panjang, nanosecond int);
Seperti dalam tiga bentuk kaedah tunggu di atas, kaedah pertama tidak mempunyai parameter masa yang bermakna pelaksanaan kaedah tunggu akan berterusan sehingga memberitahu, atau memberitahu kaedahAll tidak dipanggil. Selebihnya dua kaedah mempunyai parameter masa. Jadi mereka akan melaksanakan sehingga masa tamat tempoh atau sehingga memberitahu atau noitfyAll metode yang digunakan lebih awal daripada masa tamat. Kaedah menunggu boleh membuang pengecualian. IllegalArgumentException, jika hujah masa yang diluluskan adalah negatif. IllegalMonitorStateException, jika thread semasa tidak menggunakan sumber. InterruptedException, jika kaedah menunggu terganggu.
Perbezaan Utama Antara Kaedah Tidur dan Tunggu di Jawa
- Titik utama yang membezakan kaedah tidur dan tunggu ialah kaedah tidur memegang kunci pada objek sehingga ia terganggu atau masanya tamat. Walau bagaimanapun, kaedah menunggu melepaskan kunci pada objek yang memanggilnya dan memberikan objek lain peluang untuk dilaksanakan.
- Kaedah tidur ditakrifkan dalam kelas Thread sedangkan kaedah tunggu ditakrifkan dalam kelas Objek .
- Kaedah tidur tidak perlu dipanggil dari konteks disegerakkan. Tetapi kaedah menunggu perlu dipanggil dari disegerakkan.
- Kaedah tidur terbangun jika masa kaedah telah tamat tempoh atau ia terganggu oleh benang yang lain. Kaedah menunggu dibangkitkan
apabila memberitahu atau memberitahu Semua kaedah dipanggil. - Kaedah tidur adalah kaedah statik sedangkan, kaedah tunggu bukanlah kaedah statik .
- Kaedah tidur dijalankan pada benang semasa sedangkan kaedah menunggu dijalankan pada objek yang memanggilnya.
- Pengecualian yang dilemparkan oleh kaedah tidur adalah InterruptedException sedangkan pengecualian dengan cara menunggu adalah IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
Kesimpulan:
Apabila berbilang benang mahu menggunakan sumber yang sama satu demi satu, maka kaedah tunggu mesti digunakan. Apabila thread tidak mahu melakukan tugas apa-apa, maka kaedah tidur mesti digunakan.