"Halo, Amigo! Ini pertanyaan menarik yang sudah Anda miliki atau akan segera Anda miliki. Bagaimana Anda menghentikan utas yang sedang berjalan? "
Katakanlah pengguna memberi tahu program untuk «mengunduh file dari Internet». Utas utama membuat utas anak terpisah untuk pekerjaan ini, dan meneruskannya ke objek yang metode jalankan berisi semua tindakan yang diperlukan untuk mengunduh file.
Tapi tiba-tiba pengguna berubah pikiran. Dia tidak ingin mendownload file tersebut. Bagaimana kita membatalkan pekerjaan dan menghentikan utas?
"Ya, katakan padaku bagaimana caranya?"
" Kami tidak bisa. Itu jawaban yang paling umum dan paling benar. Anda tidak bisa menghentikan utas. Hanya utas yang bisa berhenti sendiri. "
Tetapi Anda dapat mengirim sinyal ke utas, dengan cara tertentu mengatakan bahwa pekerjaan tidak lagi perlu dilakukan dan harus diakhiri. Sama seperti utas utama berakhir dengan kembali dari metode utama, utas anak diakhiri dengan kembali dari metode run.
"Apa cara terbaik untuk melakukannya?"
"Anda dapat menambahkan beberapa variabel, seperti boolean . Jika benar , utas berjalan. Jika salah , utas harus diakhiri. Seperti ini, misalnya:"
Kode | Keterangan |
---|---|
|
Kelas Jam menulis «Tick» ke konsol satu detik sekali selamanya Jika ClockManager.isClockRun salah, metode run berakhir. |
|
Utas utama memulai utas anak (jam) yang harus berjalan selamanya
Tunggu 10 detik dan beri jam sinyal untuk mengakhiri. Utas utama menyelesaikan pekerjaannya. Utas jam mengakhiri pekerjaannya. |
"Bagaimana jika kita memiliki beberapa utas, lalu bagaimana?"
"Yang terbaik adalah memiliki variabel seperti itu untuk setiap utas. Akan lebih mudah untuk menambahkannya langsung ke kelas. Anda bisa menambahkan variabel boolean isRun di sana. Namun, lebih baik menambahkan variabel boolean isCancel yang menjadi true jika tugasnya adalah dibatalkan."
Kode | Keterangan |
---|---|
|
Kelas Jam menulis kata «Tick» ke konsol satu detik sekali selama isCancel salah.
Ketika isCancel menjadi true, metode run berakhir. |
|
Utas utama memulai utas anak (jam) yang harus berjalan selamanya
Tunggu 10 detik dan batalkan tugas dengan memanggil metode batal. Utas utama menyelesaikan pekerjaannya. Utas jam mengakhiri pekerjaannya. |
"Aku akan mengingat ini. Terima kasih, Ellie."
GO TO FULL VERSION