2013-05-26 28 views
6

Chủ đề có tự xóa và lấy rác được thu thập sau khi nó chạy hay không tiếp tục tồn tại và tiêu thụ bộ nhớ ngay cả sau khi phương pháp run() hoàn tất?Các luồng có được tự động thu gom rác sau khi chạy phương thức run() trong Java không?

Ví dụ:

Class A{ 
    public void somemethod() 
    { 
    while(true) 
    new ThreadClass().start(); 
    } 

    public class ThreadClass extends Thread{ 
     public ThreadClass() 
     {} 
     @Override 
     public void run() {......} 
    } 
} 

Tôi muốn làm rõ liệu chủ đề này sẽ được tự động xóa khỏi bộ nhớ, hay nó cần phải được thực hiện một cách rõ ràng.

+1

Lưu ý rằng bạn được khuyến khích sử dụng 'Tác vụ thay vì trực tiếp sử dụng Chủ đề. Cả hai đều nhận được rác được thu thập sau khi chúng được sử dụng, giống như bất kỳ đối tượng Java nào khác thực sự. –

+0

@owlstead: ý của bạn là AsyncTask? – Rick77

+0

Có thể là một bản sao có thể có của: http://stackoverflow.com/questions/2423284/java-thread-garbage-collected-or-not – awsome

Trả lời

8

Điều này sẽ tự động xảy ra tức là bộ nhớ sẽ tự động được giải phóng khi chuỗi được thực hiện với phương pháp chạy của nó.

1

Chỉ tồn tại cho đến khi kết thúc phương thức chạy của chúng, sau đó chúng được thực hiện đủ điều kiện để thu thập rác.

Nếu bạn yêu cầu giải pháp có bộ nhớ cao cấp, bạn có thể muốn xem xét ExecutorService. Điều này sẽ xử lý các chủ đề cho bạn và cho phép bạn tập trung vào logic hơn là xử lý các chủ đề và bộ nhớ.

0

Chủ đề được thu thập rác tự động khi hoàn thành phương thức run, do đó bạn không phải làm điều đó một cách rõ ràng.

0

Chủ đề sẽ được thu thập rác sau khi phương thức chạy của họ đã hoàn tất. Ngoại lệ đáng chú ý cho điều này là khi bạn đang sử dụng trình gỡ lỗi Android. Trình gỡ lỗi android sẽ ngăn chặn việc thu thập rác trên các đối tượng mà nó biết, bao gồm các chủ đề đã chạy xong.

Why do threads leak on Android?

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