Tôi đang sử dụng một số ThreadPoolExecutor
trong Java để quản lý nhiều luồng đang chạy. Tôi đã tạo ra ThreadFactory
đơn giản của riêng mình để tôi có thể cung cấp cho các chủ đề tên tốt hơn.Với ThreadPoolExecutor, làm cách nào để lấy tên của chuỗi đang chạy trong nhóm luồng?
Vấn đề là tên được đặt trong Chủ đề khi nhóm chủ đề được tạo lần đầu và không được gắn với nhiệm vụ mà nhóm chủ đề thực sự đang chạy. Tôi hiểu điều này ... Runnables và Callables của tôi - mặc dù họ có tên - thực sự là một mức độ trừu tượng xuống từ các chủ đề đang chạy của ThreadPoolExecutor
.
Đã có một số câu hỏi khác về StackOverflow về việc tạo tên cho ThreadPoolExecutor
nhóm luồng. (Xem How to give name to a callable Thread? và How to name the threads of a thread pool in Java.)
Điều tôi muốn biết là: có ai có giải pháp tốt để giữ tên của chuỗi chủ đề hồ bơi đồng bộ với Runnable thực sự đang chạy không?
tức là Nếu tôi gọi Thread.getCurrentThread().getName()
Tôi muốn nó không để trả về tên của nhóm chủ đề cấp cao nhất, mà là tên của Chủ đề có thể gọi/Runnable hiện đang chạy.
Vì đây là chủ yếu cho mục đích gỡ lỗi và ghi nhật ký, tôi đang cố gắng tránh một giải pháp liên quan đến việc đặt mã mới vào mọi Runnable có thể được gửi đến ThreadPoolExecutor - Tôi chỉ muốn đặt một số mã vào ThreadFactory hoặc quấn ThreadPoolExecutor chính nó để thay đổi được thực hiện ở một nơi. Nếu một giải pháp như vậy không tồn tại, tôi có lẽ sẽ không bận tâm vì nó không phải là nhiệm vụ quan trọng.
bắt đầu chỉnh sửa Để làm rõ, tôi biết tôi có thể đặt một Thread.currentThread().setName("my runnable name");
như dòng đầu tiên của phương pháp chạy của mỗi Runnable, nhưng tôi đang cố gắng để tránh làm điều đó. Tôi là một người cầu toàn ở đây, và tôi nhận ra nó, vì vậy tôi sẽ không bị xúc phạm nếu mọi người muốn bình luận về câu hỏi này và nói với tôi như vậy. chỉnh sửa cuối
Câu hỏi khác, tôi cho rằng, liệu mọi người nghĩ rằng đó là một ý tưởng tồi để làm một điều như vậy. Tôi có nên cảnh giác với việc cập nhật tên hồ bơi như thế này không?
Cảm ơn mọi đề xuất!
"giữ tên của thread hồ bơi đồng bộ với Runnable rằng nó được thực sự chạy" -> Runnable/Callable không định nghĩa một tên, vì vậy tôi không thể hoàn toàn thấy lực đẩy của câu hỏi của bạn . Có ThreadFactory của bạn thực sự cung cấp cho mỗi thread một tên riêng biệt? – serg10
Phải, mỗi Runnables và Callables của tôi thực hiện giao diện có tên, vì vậy tôi có quyền truy cập vào tên. Tôi nhận ra rằng tôi rất kén chọn rằng tôi đã triển khai một tính năng đặc biệt cho tất cả các Runnables của mình nhưng muốn tránh thêm mã bổ sung để đặt tên chuỗi theo cách thủ công. –
Đã chỉnh sửa để rõ ràng, thay đổi một số "nhóm chủ đề" thành "chuỗi" và một số "chuỗi" thành "tác vụ". –