2011-11-18 35 views
5

Tôi muốn biết bằng Java:Trong Java nếu một sợi bị giết, điều gì sẽ xảy ra với luồng khác?

  1. Nếu chủ đề chính đã giết chết điều gì sẽ xảy ra với các chủ đề con khác?
  2. Nếu chủ đề con bị giết chết, điều gì sẽ xảy ra với anh chị em và chuỗi gốc?

Tôi đọc trong liên kết sau vì các chủ đề chia sẻ không gian địa chỉ, giết chết một chuỗi cũng có thể ảnh hưởng đến chủ đề khác.

Dưới đây là báo giá từ here.

Chủ đề là các quy trình trọng lượng nhẹ chia luồng điều khiển chính thành nhiều luồng và mỗi luồng điều khiển/luồng sẽ thực thi độc lập. Hoạt động của quá trình trong một hệ thống được thể hiện bằng các luồng. Quá trình có nhiều luồng được gọi là đa luồng. Mỗi chủ đề có ID chủ đề riêng của nó (Kiểu số nguyên), đăng ký, bộ đếm chương trình, ngăn xếp, lỗi số. Các luồng có thể giao tiếp bằng bộ nhớ dùng chung trong cùng một tiến trình. Có những ưu điểm khác nhau khi sử dụng các luồng để quản lý và duy trì tính năng phụ của các ứng dụng. Khi chúng ta sử dụng các luồng hơn là ít tài nguyên hệ thống hơn được sử dụng để chuyển ngữ cảnh và tăng thông lượng của ứng dụng. Chủ đề cũng đơn giản hóa cấu trúc của chương trình. Không có cơ chế đặc biệt để giao tiếp giữa các nhiệm vụ. Chủ đề cũng có một số nhược điểm cho các chủ đề ví dụ không thể tái sử dụng vì chúng phụ thuộc vào một quá trình và không thể tách rời khỏi quá trình. Các chủ đề không bị cô lập vì chúng không có không gian địa chỉ riêng của chúng. Nguyên nhân lỗi của luồng có thể giết toàn bộ quá trình hoặc chương trình vì lỗi đó ảnh hưởng đến toàn bộ không gian bộ nhớ của tất cả các chuỗi sử dụng trong quá trình hoặc chương trình đó. Do các tài nguyên được chia sẻ bởi các luồng có trong quá trình này cũng có thể ảnh hưởng đến toàn bộ quá trình hoặc chương trình khi một hư hỏng tài nguyên theo luồng. Để truy cập đọc và ghi đồng thời vào chuỗi bộ nhớ sẽ yêu cầu đồng bộ hóa. Dữ liệu của quá trình có thể dễ dàng bị hỏng bởi luồng thông qua cuộc đua dữ liệu vì tất cả các luồng có trong quá trình này đều có quyền ghi vào cùng một đoạn dữ liệu.

u GYS thể vui lòng cho dù bất cứ điều gì kể lại trong các liên kết ở trên được áp dụng cho java

Trả lời

10

1) Không có gì sẽ xảy ra với "chủ đề trẻ em" ...

2) Không có gì sẽ xảy ra với "các chủ đề anh chị em" ...

... với ngoại lệ sau: Nếu tất cả các chủ đề còn lại là chuỗi daemon, ứng dụng sẽ chấm dứt (tức là, khi chỉ còn lại chuỗi daemon, chúng cũng sẽ bị xóa) .

Từ documentation of Thread:

[...] Java Virtual Machine tiếp tục thực hiện chủ đề cho đến khi một trong hai điều sau đây xảy ra:

  • Phương pháp thoát của lớp Runtime đã được gọi là [ ...]
  • Tất cả các chủ đề không phải là chủ đề daemon đã chết, hoặc bằng cách trả về từ cuộc gọi đến phương thức chạy hoặc bằng cách ném một ngoại lệ lan truyền ra ngoài phương thức chạy.
+0

cảm ơn bạn đã trả lời nhanh. Tôi hav thêm một nghi ngờ về điểm 2. Tôi đọc trong liên kết sau đây kể từ khi chủ đề chia sẻ không gian địa chỉ, giết chết một sợi có thể ảnh hưởng đến chủ đề khác cũng có. Đang chờ phản hồi của bạn http://www.blurtit.com/q236205.html – nantitv

+1

A) Rant là hoàn toàn sai khi nói "* Chủ đề cũng đơn giản hóa cấu trúc của chương trình *", và không có gì nó nói sau đó có thể sửa chữa mà khốn khổ kết án. B) Tôi không nghĩ rằng nó áp dụng cho Java. C) Không giết chủ đề một cách rõ ràng (bằng cách sử dụng Thread.stop). Phương thức Thread.stop không được chấp nhận vì những lý do rất tốt. – aioobe

+0

Chủ đề giúp chương trình quản lý các tác vụ khác nhau trong cùng một thời điểm. Phương thức Thread.stop() không được chấp nhận vì không an toàn (hãy nghĩ xem liệu luồng có quản lý một số dữ liệu quan trọng) hay không. Tốt hơn là dừng nó với một điều kiện boolean thành một vòng lặp while trong phương thức run(). –

0

Không có gì, trong cả hai trường hợp. Chủ đề chạy độc lập với nhau và không có những điều như "cha mẹ" hoặc "con" chủ đề theo nghĩa này. Quá trình sẽ tiếp tục chạy cho đến khi không có chủ đề nào chạy trong đó.

Quy trình chỉ đơn giản là vùng chứa chứa một số chuỗi. Các chủ đề thực thi mã. Nếu có một luồng hoặc nhiều hơn chạy bên trong một thùng chứa quy trình, quá trình này sẽ tiếp tục tồn tại. Không có mối quan hệ cộng sinh giữa các chủ đề, giết chết một người sẽ không giết người khác.

Các vấn đề liên quan