2013-08-14 34 views
7

Tôi phải sử dụng Java ThreadPoolExecutor trong một thành phần của tôi trong Android. Tôi đã tìm kiếm việc sử dụng allowCoreThreadTimeout().Việc sử dụng allowCoreThreadTimeout() trong ThreadPoolExecutor là gì?

Tôi đã đọc tài liệu Java & Android liên quan. Nhưng tôi đã không nhận được bất kỳ kịch bản triển khai hữu ích nào của phương pháp. Ai đó có thể giúp tôi không ??

+1

Tôi giả sử nếu người ta có thể tưởng tượng một kịch bản có chuỗi ít nhàn rỗi có lợi, thì đó sẽ là trường hợp sử dụng.Có lẽ nếu bạn có một hồ bơi thread rất lớn (để xử lý một kịch bản trường hợp xấu nhất), nhưng bạn không muốn giữ 100 chủ đề sống ở tất cả các lần. –

Trả lời

7

Phương pháp này cho phép bạn chỉ định có nên chấm dứt chuỗi chính nếu không có tác vụ đến trong chuỗi giữ thời gian hoạt động hay không. Điều này có liên quan đến các cấu hình khác như, setCorePoolSize(), setKeepAliveTime (..)

Khi bạn tạo hồ bơi và luồng chủ đề tồn tại trong hồ bơi ngay cả khi không có tác vụ nào đang chạy. Nó là tốn kém để giữ cho các chủ đề còn sống. Nếu bạn muốn có được đi xe của những khi bạn không có nhiệm vụ để thực hiện phương pháp này là hữu ích trong trường hợp đó. Bạn cần phải vượt qua giá trị thực sự sau đó họ sẽ chết sau thời gian còn sống.

Trong Tóm tắt:

allowCoreThreadTimeOut(true) // Could save memory compromising performance 

allowCoreThreadTimeOut(false) // Comsume memory but high performance 
+1

Tôi nghĩ rằng OP yêu cầu các kịch bản mà bạn có thể * muốn * để thực hiện việc này. –

+0

@Shamim Ahmed Tôi biết điều này. Nó được đề cập trong tài liệu. Nhưng tôi muốn biết về các kịch bản thực hiện? – LazyTechie

+0

@LazyTechie, Trả lời cập nhật –

2
public void allowCoreThreadTimeOut(boolean value) 

này được giải thích rất nhiều trong javadoc

Thiết lập chính sách quản lý cho dù chủ đề cốt lõi có thể thời gian ra và chấm dứt nếu không có nhiệm vụ đến trong giữ-sống thời gian, được thay thế nếu cần khi nhiệm vụ mới đến.

Khi sai, chủ đề cốt lõi không bao giờ bị chấm dứt do thiếu tác vụ đến. Khi đúng, chính sách giữ nguyên tương tự áp dụng cho các luồng không phải lõi cũng áp dụng cho các luồng chính. Để tránh thay thế chỉ liên tục, thời gian lưu giữ phải lớn hơn 0 khi cài đặt đúng. Phương pháp này nói chung nên được gọi trước khi hồ bơi được sử dụng tích cực.

+1

Tôi nghĩ rằng OP là yêu cầu cho các kịch bản mà bạn có thể * muốn * để làm điều này. –

+0

@Tala Tôi đã đề cập rằng tôi đã đọc tài liệu. Vấn đề là tôi không hiểu làm thế nào để thực hiện nó. Ngoài ra bạn có thể vui lòng đặt một số ánh sáng trên "được thay thế nếu cần thiết khi nhiệm vụ mới đến". – LazyTechie

0

Vâng allowCoreThreadTimeout (true) sẽ được sử dụng khi bạn muốn chấm dứt chuỗi chủ đề lõi sau một số thời gian chờ được chỉ định.

Hãy reffer để liên kết sau đây từ các tài liệu:

Android API Docs - ThreadPoolExecutor

Khi bạn đang thực sự trong điều kiện bộ nhớ thấp, bạn phải vượt qua đúng với phương pháp này.

0

Cho phép các chuỗi chính cho thời gian chờ cho phép ứng dụng xử lý hiệu quả lưu lượng truy cập 'bùng nổ'. Hãy xem xét một kịch bản trong đó ứng dụng doanh nghiệp không hoạt động trong giờ làm việc nhưng nhận được nhiều yêu cầu vào cuối ngày.

Một cách để xử lý hiệu quả trường hợp này là bật allowCoreThreadTimeout() và đặt coreThreads = maxThreads thành một số giá trị thích hợp cao. Trong thời gian cao điểm đó, nhóm chủ đề của bạn sẽ mở rộng quy mô để xử lý lưu lượng truy cập và sau đó giảm quy mô xuống 0, giải phóng tài nguyên máy chủ.

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