Java: Định nghĩa và khởi tạo Thread


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Mỗi luồng được liên kết với một thể hiện (đối tượn) của lớp Thread. Có hai chiến lược cơ bản để sử dụng các đối tượng Thread để tạo một ứng dụng đồng thời:

  • Để kiểm soát trực tiếp việc tạo và quản lý luồng, chỉ cần khởi tạo Thread mỗi khi ứng dụng cần bắt đầu một tác vụ không đồng bộ.
  • Để quản lý luồng trừu tượng từ phần còn lại của ứng dụng của bạn, hãy chuyển các nhiệm vụ của ứng dụng cho trình thực thi (executer).

Bài học này sẽ nói về việc sử dụng các đối tượng Thread. Các trình thực thi sẽ được thảo luận ở bài viết Executor.

Mỗi ứng dụng tạo ra một thể hiện của Thread sẽ phải cung cấp mã lệnh để chạy trong luồng đó. Có hai cách để làm điều này:

  • Cung cấp một đối tượng Runnable. Interface Runnable định nghĩa một phương thức duy nhất là phương thức run(), nó chứa mã thực thi luồng. Đối tượng Runnable được truyền tới hàm tạo Thread, như trong ví dụ HelloRunnable dưới đây:
public class HelloRunnable implements Runnable {

  public void run() {

    System.out.println("Hello from a thread!");

  }

  public static void main(String args[]) {
    (new Thread(new HelloRunnable())).start();
  }
}
  • Lớp con Thread. Lớp Thread bản thân nó thực thi Runnable mặc dù phương thức run() của nó không làm gì. Một ứng dụng có thể phân lớp Thread, cung cấp sự thực thi phương thức run() của riêng nó, như trong ví dụ sau:
public class HelloThread extends Thread {

  public void run() {
    System.out.println("Hello from a thread!");
  }

  public static void main(String args[]) {
    (new HelloThread()).start();
  }
}

Chú ý rằng cả hai ví dụ trên đều gọi phương thức Thread.start để tạo một luồng mới.

Vậy bạn nên sử dụng cách nào? Đối với cách thứ nhất, đối tượng Runnable mang tính tổng quát hơn, Runnable có thể phân lớp thành một lớp khác so với Thread. Nhưng cách thứ hai lại dễ dàng sử dụng hơn trong các ứng dụng đơn giản, nhưng bị hạn chế bởi thực tế là lớp tác vụ của bạn phải là một lớp con của Thread. Bài những bài viết trong phần này tập trung vào phương pháp tiếp cận đầu tiên, tách tác vụ Runnable khỏi đối tượng Thread, bởi vì phương pháp này linh hoạt hơn, nó còn được áp dụng cho các API quản lý luồng cấp cao sau này.

Lớp Threadlớp định nghĩa một số phương thức hữu ích cho việc quản lý luồng. Chúng bao gồm các phương thức static, cung cấp thông tin về hoặc ảnh hưởng đến trạng thái của luồng gọi phương thức. Các phương thức khác nhau được gọi từ các luồng khác nhau liên quan đến việc quản lý luồng và đối tượng Thread. Ta sẽ xem xét một số phương thức này trong các phần sau.

» Tiếp: Dừng thực thi với phương thức Thread.sleep()
« Trước: Tiến trình (Progress) và Luồng (Thread)
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!