Java - Nhóm Thread

Xin chào các nhà thuật toán Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới Nhóm Thread trong Java. Đừng lo lắng nếu bạn là mới bắt đầu với lập trình; tôi sẽ là người hướng dẫn bạn thân thiện, và chúng ta sẽ làm cho chủ đề này bước به bước. Vậy, hãy lấy đồ uống yêu thích của bạn, thoải mái ngồi, và hãy bắt đầu!

Java - Thread Group

Nhóm Thread là gì?

Hãy tưởng tượng bạn đang tổ chức một buổi tiệc lớn (hãy ở bên cạnh tôi, tôi hứa rằng điều này liên quan đến Java!). Bạn có thể nhóm bạn tham gia dựa trên cách họ quen biết nhau - bạn cũ trường đại học, đồng nghiệp làm việc, gia đình, v.v. Nhóm này giúp bạn quản lý buổi tiệc tốt hơn. Thế giới Java cũng làm điều tương tự với các luồng!

Nhóm Thread trong Java chính là như tên gọi của nó - một nhóm các luồng! Đó là cách để tổ chức nhiều luồng vào một đối tượng duy nhất. Nhóm này cho phép chúng ta thực hiện các hoạt động trên nhiều luồng đồng thời, làm cho cuộc sống của chúng ta như một nhà lập trình dễ dàng hơn.

Tại sao sử dụng Nhóm Thread?

  1. Tổ chức: Giống như tổ chức tủ quần áo của bạn giúp bạn dễ dàng tìm thấy quần áo, nhóm luồng giúp quản lý chúng tốt hơn.
  2. Hoạt động tập thể: Bạn có thể thực hiện hành động trên tất cả các luồng trong nhóm đồng thời.
  3. Bảo mật: Nhóm Thread có thể được sử dụng để tạo ra một ranh giới bảo mật cho một số luồng.

Bây giờ khi chúng ta biết Nhóm Thread là gì và tại sao chúng lại hữu ích, hãy xem cách tạo và sử dụng chúng.

Tạo Nhóm Thread

Việc tạo Nhóm Thread cũng dễ như làm một bánh sandwich (đúng là có thể dễ hơn). Dưới đây là cách bạn làm điều đó:

ThreadGroup tg = new ThreadGroup("Nhóm Thread của tôi");

Đó là tất cả! Bạn vừa tạo một Nhóm Thread có tên "Nhóm Thread của tôi". Dễ phải không?

Thêm Luồng vào Nhóm Thread

Bây giờ khi chúng ta có nhóm của mình, hãy thêm một số luồng vào nó. Đó giống như thêm cầu thủ vào đội bóng thể thao:

Thread t1 = new Thread(tg, "Luồng 1");
Thread t2 = new Thread(tg, "Luồng 2");
Thread t3 = new Thread(tg, "Luồng 3");

Ở đây, chúng ta đã tạo ba luồng và thêm chúng vào nhóm luồng tg. Mỗi luồng được đặt tên để dễ dàng nhận diện.

Làm việc với Nhóm Thread

Hãy xem một số hoạt động phổ biến mà chúng ta có thể thực hiện trên Nhóm Thread:

1. Lấy Nhóm Cha

Mỗi Nhóm Thread (ngoại trừ nhóm hệ thống) đều có một nhóm cha. Dưới đây là cách để lấy nó:

ThreadGroup parentGroup = tg.getParent();
System.out.println("Nhóm cha: " + parentGroup.getName());

Điều này sẽ in ra tên của nhóm cha.

2. Liệt kê tất cả các Luồng trong Nhóm

Muốn biết ai trong nhóm của bạn? Dưới đây là cách:

Thread[] threadList = new Thread[tg.activeCount()];
tg.enumerate(threadList);

System.out.println("Các luồng trong nhóm " + tg.getName() + ":");
for (Thread t : threadList) {
if (t != null) {
System.out.println(t.getName());
}
}

Đoạn mã này sẽ liệt kê tất cả các luồng hoạt động trong nhóm.

3. Đặt Các Thuộc tính của Nhóm

Chúng ta có thể đặt các thuộc tính khác nhau cho Nhóm Thread của mình:

tg.setMaxPriority(7);  // Đặt ưu tiên tối đa cho các luồng trong nhóm này
tg.setDaemon(true);    // Đặt nhóm này làm daemon

Một Ví dụ Hoàn chỉnh

Hãy để tất cả vào một ví dụ hoàn chỉnh:

public class ThreadGroupDemo {
public static void main(String[] args) {
// Tạo một nhóm luồng
ThreadGroup tg = new ThreadGroup("Nhóm Thread của tôi");

// Tạo các luồng trong nhóm
Thread t1 = new Thread(tg, () -> {
System.out.println("Luồng 1 đang chạy");
}, "Luồng 1");

Thread t2 = new Thread(tg, () -> {
System.out.println("Luồng 2 đang chạy");
}, "Luồng 2");

// Bắt đầu các luồng
t1.start();
t2.start();

// In ra thông tin về nhóm
System.out.println("Tên Nhóm Thread: " + tg.getName());
System.out.println("Số lượng luồng hoạt động: " + tg.activeCount());

// Liệt kê tất cả các luồng
Thread[] threadList = new Thread[tg.activeCount()];
tg.enumerate(threadList);
System.out.println("Các luồng trong nhóm:");
for (Thread t : threadList) {
if (t != null) {
System.out.println(t.getName());
}
}
}
}

Khi bạn chạy đoạn mã này, bạn sẽ thấy kết quả in ra các luồng đang chạy, tên nhóm và danh sách các luồng trong nhóm.

Các Phương thức của Nhóm Thread

Dưới đây là bảng một số phương thức quan trọng của Nhóm Thread:

Phương thức Mô tả
activeCount() Trả về số lượng luồng hoạt động trong nhóm
activeGroupCount() Trả về số lượng nhóm hoạt động trong nhóm này
enumerate(Thread[] list) Sao chép mọi luồng hoạt động trong nhóm này vào mảng được chỉ định
getMaxPriority() Trả về ưu tiên tối đa của nhóm này
getName() Trả về tên của nhóm này
getParent() Trả về nhóm cha của nhóm này
interrupt() Ngắt tất cả các luồng trong nhóm này
isDaemon() Kiểm tra xem nhóm này có phải là daemon không
setDaemon(boolean daemon) Thay đổi trạng thái daemon của nhóm này
setMaxPriority(int pri) Đặt ưu tiên tối đa của nhóm này

Kết luận

Và thế là xong, các bạn! Chúng ta đã hành trình qua thế giới Nhóm Thread Java, từ việc tạo chúng đến quản lý các luồng bên trong chúng. Hãy nhớ rằng Nhóm Thread như những người tổ chức tiệc cho các luồng của bạn - chúng giúp giữ cho mọi thứ gọn gàng và dễ dàng quản lý nhiều luồng đồng thời.

Khi bạn tiếp tục hành trình Java của mình, bạn sẽ tìm thấy Nhóm Thread là một công cụ tiện ích trong hộp công cụ lập trình của bạn. Chúng đặc biệt hữu ích trong các ứng dụng lớn hơn nơi bạn có thể phải quản lý nhiều luồng cùng nhau.

Hãy tiếp tục tập luyện, tiếp tục lập trình, và nhất quán là hãy vui vẻ với Java! Đến lần sau, chúc mừng lập trình!

Credits: Image by storyset