Menggunakan Sleep() untuk Satu Benang Tanpa Membekukan Keseluruhan Pelaksanaan
Salah satu aspek asas multithreading ialah keupayaan untuk menjeda sesuatu pelaksanaan benang sambil membenarkan orang lain terus berjalan. Di Java, sleep() biasanya digunakan untuk tujuan ini. Walau bagaimanapun, apabila digunakan dengan aplikasi GUI, sleep() boleh membawa kepada akibat yang tidak diingini.
Masalah:
Apabila sleep() dipanggil pada urutan yang mengendalikan acara GUI , keseluruhan aplikasi membeku, termasuk semua urutan lain. Ini berlaku kerana Benang Penghantaran Acara (EDT) bertanggungjawab untuk mengendalikan semua kemas kini GUI dan sleep() menghalangnya daripada berbuat demikian.
Penjelasan:
Swing GUI dicipta dan dimanipulasi pada EDT, benang yang berasingan daripada aplikasi utama. Apabila sleep() dipanggil pada EDT, ia menghentikan pelaksanaannya, dengan berkesan menghalang sebarang kemas kini GUI. Akibatnya, semua rangkaian lain juga terpaksa menunggu, menyebabkan aplikasi kelihatan beku.
Penyelesaian:
Untuk mengelakkan aplikasi membeku, terdapat beberapa alternatif kaedah untuk menjeda satu utas tanpa menjejaskan EDT:
Ringkasnya, sleep() tidak boleh digunakan pada EDT kerana ia boleh membekukan aplikasi. Sebaliknya, gunakan Swing Timer, Swing Worker atau TimerTask untuk menjeda satu urutan tanpa menjejaskan kemas kini GUI.
Atas ialah kandungan terperinci Patutkah Saya Menggunakan `sleep()` pada Benang Penghantaran Acara dalam Aplikasi Java Swing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!