2012-08-22 24 views
5

Javadoc nói rằng dịch vụ được trả về bởi Executors.newCachedThreadPool sử dụng lại các chuỗi. Sao có thể như thế được? Chỉ có thể bắt đầu một chuỗi bằng cách gọi start. Vậy làm thế nào để họ thực hiện nó? Chủ đề của dịch vụ này đang chạy trong một vòng lặp vô hạn và Runnable -s của chúng được thay thế theo yêu cầu?Cách chủ đề newCachedThreadPool reuses?

Trả lời

4

Một Runnable có thể gọi một Runnable khác.

Mỗi luồng chỉ chạy một Runnable chính, nhưng Runnable đó có Runnables từ BlockingQueue được chia sẻ và gọi chúng cho đến khi nó bị tắt.

Đơn giản hóa.

final BlockingQueue<Runnable> queue = ... 

Runnable runs = new Runnable() { public void run() { 
    while(running) 
     queue.take().run(); 
}}; 

Bạn có thể đọc mã để xem nó thực sự như thế nào.

+1

Tôi có thể đoán ... chữ ký cũng đề xuất chức năng này. – zeller

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