Lập trình viên thậm chí không cần phải quan tâm khi các sợi dây được làm gián đoạn mỗi khác
Điều này không đúng. Có rất nhiều, nhiều tình huống mà bạn muốn biết rằng một sự gián đoạn đã được yêu cầu, nhưng bạn sẽ bỏ qua nó một chút để hoàn thành công việc bạn đang làm.
Ví dụ: giả sử một chuỗi mở một tệp và bắt đầu viết một số dữ liệu. Chủ đề này, sau đó, khối, chờ đợi cho phần còn lại của dữ liệu được tính toán. Giả sử rằng một luồng thứ hai cố gắng làm gián đoạn luồng thứ nhất. Nó nên làm gì? Đơn giản chỉ cần chết, và có thể bạn kết thúc với một tập tin bị hỏng, không đầy đủ? Nó có nên dọn dẹp bằng cách xóa tập tin mà nó bắt đầu viết không? Có nên bỏ qua yêu cầu gián đoạn và chỉ cần đợi cho đến cuối dữ liệu cần ghi? Nó có nên viết một cái gì đó có nghĩa là "Tôi đã bị gián đoạn ở đây", để nó có thể tiếp tục công việc của nó từ thời điểm đó trong thời gian tới?
Trên một trường hợp khác, giả sử bạn có máy chủ HTTP. Giả sử người dùng đang truy cập vào máy chủ của bạn và, tải xuống một tệp lớn từ máy chủ của bạn. Bạn muốn dừng máy chủ. Ứng dụng sau đó sẽ cố gắng làm gián đoạn tất cả các chuỗi công việc. Họ nên làm gì? Chỉ cần dừng tải xuống? Hoặc họ có nên đợi người dùng tải xuống các tệp của họ và chỉ sau đó họ có nên chết mà không chấp nhận thêm bất kỳ yêu cầu nào nữa không? Cả hai kịch bản đều có giá trị như nhau.
Như bạn thấy, có quá nhiều kịch bản có thể xảy ra và sẽ thật khủng khiếp nếu chúng tôi không có cách nào để biết rằng một sự gián đoạn đã được yêu cầu. Đôi khi, bạn sẽ chỉ đơn giản là để cho thread chết. Đôi khi, bạn phải làm sạch môi trường. Đôi khi, bạn muốn nó hoàn thành yêu cầu đang hoạt động nhưng không chấp nhận thêm bất kỳ yêu cầu nào.
Nguồn
2013-04-08 03:57:15
Tôi đoán đây là để nhà phát triển thực hiện hành động thích hợp bất cứ khi nào chuỗi bị gián đoạn. Chủ đề có thể đang thực hiện một số tác vụ quan trọng và có thể cần phải xử lý gián đoạn theo cách chính xác. –
Để buộc bạn bắt nó. – EJP
Vui lòng không đóng. Có một số câu trả lời tuyệt vời ở đây – Victor