Tôi bối rối về những điều sau đây:
Để sử dụng các chủ đề trong một chương trình Java, cách đơn giản nhất là mở rộng Thread class và thực hiện giao diện runnable (hoặc đơn giản là thực hiện runnable).
Để bắt đầu thực hiện luồng. chúng ta phải gọi phương thức start của Thread(), mà lần lượt gọi phương thức run() của luồng. Và do đó, chủ đề bắt đầu.
Phương thức start() (trừ khi tôi sai) phải được gọi chính xác và chỉ một lần cho mỗi chuỗi. Kết quả là, các thể hiện luồng không thể được tái sử dụng trừ khi bằng cách nào đó, phương thức chạy tự chạy trong một số vòng lặp vô hạn tạo điều kiện cho việc triển khai tùy chỉnh của việc hồi sinh luồng.
Bây giờ javadoc link text nóijava thread reusage thông qua executor
cuộc gọi để thực hiện sẽ sử dụng lại đề xây dựng trước đây nếu có
Tôi không hiểu làm thế nào điều này được thực hiện. Tôi cung cấp phương thức thực thi của phương thức thi hành chủ đề tùy chỉnh của tôi, ví dụ:
ExecutorService myCachedPool = Executors.newCachedThreadPool();
myCachedPool.execute(new Runnable(){public void run(){
//do something time consuming
}});
Làm cách nào để có thể sử dụng lại chuỗi tùy chỉnh này cho khung thực thi?
Người thực thi có được phép gọi phương thức start() nhiều hơn 1 lần trong khi chúng tôi không thể tham gia chương trình của chúng tôi không? Tôi có hiểu nhầm điều gì đó không?
Cảm ơn bạn.
@ Jon: Xin lỗi tôi bị mất bạn. Vì vậy, các chủ đề nội bộ của khuôn khổ được tái sử dụng và không phải là runnable tôi vượt qua như là đối số để thực hiện? Chủ đề của tôi mà tôi ủy nhiệm cho khung công tác sẽ được tái khởi tạo mỗi lần, nhưng bởi cùng một thể hiện của luồng nội bộ do khung công tác tạo ra? – Cratylus
@ user384706: Có. Runnable của bạn * không phải là * một chủ đề - nó chỉ là một nhiệm vụ được thực hiện. Bạn cần phân biệt giữa hai người; chúng rất khác nhau. –
@Jon: Cảm ơn bạn rất nhiều. Điều duy nhất tôi không chắc chắn là, lợi ích của việc sử dụng Executors.newCachedThreadPool(); Bởi vì nếu lớp của tôi thực hiện runnable (cho một nhiệm vụ) là tốn kém để được instantiated, nó sẽ không được tái sử dụng và cùng một thread của khuôn khổ, sẽ tiếp tục sử dụng các phiên bản mới của nhiệm vụ. Vì vậy, những gì tôi sẽ đạt được từ api này? Trừ khi khái niệm là mỗi lớp thực hiện runnable là tối thiểu. – Cratylus