Tidur Benang dan Pelaksanaan Berbilang Benang dalam UI Swing
Di Java, apabila berbilang urutan dilaksanakan serentak, setiap urutan mempunyai urutan pelaksanaan khususnya sendiri. Walau bagaimanapun, apabila bekerja dengan antara muka pengguna grafik (GUI) Swing, adalah penting untuk memahami selok-belok pengurusan benang.
Dalam senario yang dibentangkan, pengguna berusaha untuk melaksanakan permainan tic-tac-toe di mana AI bertindak balas kepada input pemain selepas kelewatan satu saat. Untuk mencapai matlamat ini, urutan baharu dicipta untuk AI dan kaedah ait.sleep(1000) digunakan dalam urutan ini.
Walau bagaimanapun, tingkah laku yang tidak dijangka diperhatikan. Daripada benang AI berhenti seketika, kedua-dua benang AI dan benang GUI utama dihentikan. Ini berlaku kerana Swing GUI beroperasi pada utas berasingan yang dikenali sebagai Event Dispatch Thread (EDT).
Apabila kaedah sleep() dipanggil dalam EDT, ia menggantung semua operasi dalam thread, termasuk acara GUI pemprosesan. Akibatnya, GUI kelihatan beku semasa benang AI sedang tidur.
Untuk mengelakkan isu ini, adalah penting untuk menggunakan kaedah alternatif untuk melaksanakan kelewatan masa dalam Swing GUI. Pilihan yang sesuai termasuk:
Dengan melaksanakan kelewatan masa melalui pendekatan yang disyorkan ini, GUI kekal responsif sambil membenarkan urutan lain melaksanakan tugas. Ini memastikan pengalaman pengguna yang optimum dan pengurusan benang yang cekap dalam Swing GUI.
Atas ialah kandungan terperinci Mengapa GUI Swing Saya Membeku Apabila Menggunakan `Thread.sleep()` untuk AI Delays?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!