"Đây là một chủ đề mới và thú vị."

"Hóa ra bạn có thể bắt đầu chủ đề ở các chế độ khác nhau."

"Một chương trình tiêu chuẩn (chỉ có một luồng) ngừng chạy khi luồng chính kết thúc công việc. Luồng chính kết thúc thực thi, chương trình kết thúc và JVM giải phóng bộ nhớ của nó."

"Nếu chúng tôi khởi chạy một luồng con, chương trình sẽ tiếp tục chạy, ngay cả khi luồng chính kết thúc. JVM không kết thúc miễn là có ít nhất một luồng đang chạy. Sau khi tất cả các luồng đang chạy kết thúc, chương trình sẽ đóng lại."

"Chà, các chương trình lớn thường có cái gọi là 'luồng dịch vụ' có nhiệm vụ phục vụ các phần khác của chương trình. Riêng chúng, chúng không cần thiết. Ví dụ: xóa các đối tượng không sử dụng (thu gom rác), kết xuất bộ nhớ và lỗi ghi nhật ký, các báo cáo khác nhau về trạng thái chương trình hiện tại, v.v.

"Các luồng dịch vụ này là cần thiết khi chương trình đang chạy, nhưng chúng không cần thiết cho riêng chúng."

"Vâng, tôi hiểu điều đó."

"Java cho phép bạn chạy một luồng như một trình nền . Các luồng như vậy hoạt động giống như các luồng khác, nhưng nếu tất cả các luồng không phải trình nền trong một chương trình đã kết thúc và chỉ còn lại các luồng trình nền, thì JVM sẽ đóng chương trình."

"Vì vậy, khai báo một luồng 'dịch vụ' chỉ có nghĩa là nó không được xem xét khi chương trình kết thúc. Chỉ vậy thôi sao?"

"Uhhhh... Chà, cậu nói thật ngắn gọn và ngọt ngào. Về cơ bản, đó là điều tớ muốn nói với cậu."

"Brevity là một tài năng. Và những robot tài năng là tài năng trong mọi thứ."

"Có câu hỏi nào không?"

"Làm thế nào để bạn bắt đầu một luồng dưới dạng daemon? Kế thừa từ một số lớp DaemonThread?"

"Không, nó đơn giản hơn thế nhiều. Lớp Thread có một phương thức setDaemon(boolean). Bạn chỉ cần truyền vào true và thế là xong. Bạn chỉ cần gọi nó trước khi gọi phương thức start(), trước khi luồng thực sự là đã tạo. Bạn không thể thay đổi loại chủ đề sau khi nó bắt đầu chạy."

Ví dụ:
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();

"Và đó là nó?"

"Đúng."

"Tôi muốn một lần nữa thu hút sự chú ý của bạn vào quá trình tạo và bắt đầu một chủ đề."

"Việc tạo một đối tượng Thread không tạo ra một luồng. Một đối tượng Thread không phải là một luồng. JVM tạo một luồng khi phương thức start() được gọi. Một luồng là một đối tượng JVM đặc biệt cho phép bạn truy cập thông tin về một luồng và đưa ra bạn kiểm soát nó một chút."

"Tôi hiểu rồi. Cảm ơn, Ellie."