Lớp Thread
trong Java cung cấp nhiều phương thức mạnh mẽ để quản lý và tương tác với luồng. Dưới đây, chúng ta sẽ tìm hiểu về các phương thức quan trọng của lớp Thread
và cách sử dụng chúng.
Phương thức suspend()
và resume()
-
suspend()
: Phương thức này tạm dừng hoạt động của một luồng bằng cách ngưng cung cấp CPU cho luồng đó. Luồng vẫn tồn tại và có thể được khởi động lại bằng phương thứcresume()
. Chú ý rằng việc sử dụngsuspend()
không nên được khuyến nghị vì nó có thể dẫn đến các vấn đề như deadlock. -
resume()
: Phương thức này sử dụng để tiếp tục hoạt động của một luồng sau khi nó đã bị tạm dừng bằngsuspend()
.
Ví dụ:
java
class MyThread extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("Thread " + Thread.currentThread().getId() + " - Count: " + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
}
public class SuspendResumeExample {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
// Suspend t1 temporarily
t1.suspend();
System.out.println("Thread " + t1.getId() + " suspended.");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println(e);
}
// Resume t1
t1.resume();
System.out.println("Thread " + t1.getId() + " resumed.");
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
Kết quả
Thread 10 - Count: 1
Thread 11 - Count: 1
Thread 10 - Count: 2
Thread 11 - Count: 2
Thread 10 - Count: 3
Thread 11 - Count: 3
Thread 10 - Count: 4
Thread 11 - Count: 4
Thread 10 - Count: 5
Thread 11 - Count: 5
Thread 10 suspended.
Thread 10 resumed.
Phương thức stop()
- Ý nghĩa: Phương thức này dùng để kết thúc một luồng bằng cách ném ra ngoại lệ
ThreadDeath
. Tuy nhiên, việc sử dụngstop()
không được khuyến nghị, vì nó có thể gây ra các vấn đề như sảy ra deadlock và không giải phóng tài nguyên một cách đúng đắn.
Phương thức destroy()
- Ý nghĩa: Phương thức này dùng để đột ngột dừng một luồng. Tương tự như
stop()
, việc sử dụngdestroy()
không nên được khuyến nghị do nguy cơ gây ra các vấn đề không mong muốn.
Phương thức isAlive()
- Ý nghĩa: Phương thức này kiểm tra xem một luồng còn sống (active) hay không. Nó trả về
true
nếu
luồng đã được khởi động bằng start()
và vẫn còn hoạt động, ngược lại trả về false
.
Phương thức yield()
- Ý nghĩa: Phương thức
yield()
dùng để nhường CPU cho các luồng khác trong hàng đợi Ready. Nó ngừng cấp CPU trong lần nhận CPU đó và cho phép các luồng khác được chạy.
Các phương thức khác của lớp Thread trong Java
sleep()
: Sử dụng để ngừng luồng trong một khoảng thời gian nhất định.join()
: Sử dụng để đợi một luồng khác hoàn thành trước khi luồng hiện tại tiếp tục thực thi.getName()
: Trả về tên của luồng.setName()
: Thay đổi tên của luồng.getId()
: Trả về ID của luồng.getState()
: Trả về trạng thái của luồng.currentThread()
: Trả về tham chiếu của luồng đang được thi hành.getPriority()
: Trả về mức độ ưu tiên của luồng.setPriority()
: Thay đổi mức độ ưu tiên của luồng.isDaemon()
: Kiểm tra xem luồng có phải là luồng daemon hay không.setDaemon()
: Xác định xem luồng có phải là luồng daemon hay không.interrupt()
: Sử dụng để gián đoạn một luồng, thường dùng để kết thúc một luồng đang chạy.
Trên đây là một số phương thức quan trọng của lớp Thread
trong Java. Việc hiểu và sử dụng chúng một cách đúng đắn là rất quan trọng để quản lý và tương tác với các luồng trong ứng dụng Java.