thể trùng lặp:
Java Thread Garbage collected or notJava đề và rác thu
Hãy xem xét các lớp sau đây:
class Foo implements Runnable {
public Foo() {
Thread th = new Thread (this);
th.start();
}
public run() {
... // long task
}
}
Nếu chúng ta tạo ra một số trường hợp của Foo
bằng cách làm
new Foo();
new Foo();
new Foo();
new Foo();
(lưu ý rằng chúng tôi không giữ con trỏ cho họ).
những trường hợp có thể được loại bỏ bằng các bộ thu rác trước thread trong
run()
kết thúc? (Nói cách khác: là có bất kỳ tài liệu tham khảo đếnFoo
đối tượng?)Và, trong Mặt khác, những trường hợp đó sẽ được gỡ bỏ bởi GC sau khi thread trong `run()' kết thúc, hoặc là chúng ta lãng phí bộ nhớ ("rò rỉ bộ nhớ")?
Nếu một trong hai hoặc 2. là một vấn đề, cách thích hợp để làm điều đó là gì?
Cảm ơn
Bạn thực sự có thể kiểm tra điều này rất dễ dàng. –
@Quaternion, có thể, nhưng từ ngữ của câu hỏi khác thực sự là "khó hiểu" và khó hiểu, imho. – cibercitizen1
Đây không phải là bản sao. Câu hỏi được liên kết không đề cập đến khía cạnh của "nó sẽ là rác được thu thập sau khi hoàn thành" (Tôi sắp hỏi điều này một cách cụ thể). Nó chỉ hỏi/trả lời các khía cạnh của "nó sẽ không được GC'ed trong khi chạy". Câu hỏi này ở đây là theo ý kiến của tôi tốt hơn. – bluenote10