Thread
Java là ngôn ngữ hỗ trợ đã luồng (multi-threaded). Điều này có nghĩa bạn có thể tùy chọn sử dụng các tài nguyên bằng cách chạy hai hoặc nhiều luồng, mỗi luồng thi hành một nhiệm vụ khác nhau. Chương trình của bạn có thể lập trình chia thành nhiều luồng và kích hoạt nó chạy song song.
Hình vẽ sau cho biết vòng đời của một luồng
- New một thread mới bắt đầu. Trạng thái là mới sinh, trạng thái này giữ nguyên cho tới khi thread bắt đầu khởi chạy.
- Runnable sau trạng thái New, thread chuyển sang trạng thái runable. Trạng thái này ám chỉ thread đang chạy
- Waiting đôi khi, thread ở trạng thái chờ một thread khác hoàn thành để tiếp tục chạy
- Dead thread vào trạng thái này khi thi hành xong tác vụ
Có 2 cách để tạo ra một thread: Kế thừa lớp Thread hoặc triển khai giao diện Runnable
Tạo ra thread bằng cách kế thừa lớp Thread
Việc của bạn là kế thừa lớp Thread, nạp chồn phương thức run(), sau đó tạo đối tượng và gọi start để chạy thread
class Loader extends Thread { int i=0; Loader(int j){ this.i = j; } public void run() { for (int j = 1; j <=this.i; j++) System.out.println("Hello " + this.i + "/" +j); } } class MyClass { public static void main(String[] args) { Loader obj = new Loader(10); Loader obj2 = new Loader(200); Loader obj3 = new Loader(300); obj.start(); obj2.start(); obj3.start(); } }
Như bạn thấy, lớp Loader kế thừa lớp Thread và nạp chồng phương thức run(), sau khi tạo ra đối tượng, gọi run() để chạy thread.
Mọi thread trong Java đều có một độ ưu tiên, nhằm giúp hệ thống quyết định thứ tự chạy. Độ ưu tiên có mức từ 1 đến 10 và thiết lập bằng phương thức setPriority()
Tạo ra thread từ giao diện Runnable
Bạn cần implement giao diện Runnable và triển khai mã cho phương thức run(). Sau khi tạo đối tượng, bạn chuyển nó cho khởi tạo của lớp Thread, cuối cùng gọi start để chạy.
class Loader implements Runnable { public void run() { System.out.println("Hello 1"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Hello 2"); } } class MyClass { public static void main(String[ ] args) { Thread t = new Thread(new Loader()); t.start(); } }
Phương thức Thread.sleep() cho phép bạn dừng lại một thread trong một khoảng thời gian.