Trên Android áp dụng các quy tắc tương tự như trong môi trường Java bình thường. Trong Java, các luồng không bị giết, nhưng việc dừng một luồng được thực hiện theo cách hợp tác . Luồng được yêu cầu kết thúc và sau đó luồng có thể tắt một cách duyên dáng.
Thường thì một volatile boolean
trường được sử dụng mà luồng kiểm tra định kỳ và kết thúc khi nó được đặt thành giá trị tương ứng.
Tôi sẽ không sử dụng một boolean
để kiểm tra xem chuỗi có nên kết thúc hay không . Nếu bạn sử dụng volatile
làm công cụ sửa đổi trường, điều này sẽ hoạt động đáng tin cậy, nhưng nếu mã của bạn trở nên phức tạp hơn, thay vào đó sử dụng các phương pháp chặn khác bên trong while
vòng lặp, thì điều đó có thể xảy ra, mã của bạn sẽ không kết thúc hoặc ít nhất là mất nhiều thời gian hơn khi bạn có thể muốn.
Một số phương pháp thư viện chặn hỗ trợ gián đoạn.
Mọi luồng đều có trạng thái bị gián đoạn cờ boolean và bạn nên tận dụng nó. Nó có thể được thực hiện như thế này:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Mã nguồn lấy từ Java Concurrency trong Thực tế . Vì cancel()
phương thức là công khai, bạn có thể cho phép một luồng khác gọi phương thức này như bạn muốn.
Ngoài ra còn có một phương thức static được đặt tên kém interrupted
để xóa trạng thái bị gián đoạn của luồng hiện tại.