Khởi tạo và chạy một thread trong Java

3119

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

Trong Java, chúng ta có 2 cách để khởi tạo và chạy một thread, đó là sử dụng class Thread hoặc là interface Runnable. Cụ thể như thế nào, trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về chúng các bạn nhé!

  10 câu hỏi javascript để nâng cao trình độ
  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java

Class Thread

Các bạn có thể dễ dàng tạo mới một thread bằng cách extend class của các bạn từ class Thread rồi sau đó override phương thức run() của class Thread này. Code bên trong run() method sẽ là tác vụ mà chúng ta cần execute trong thread mới.

Ví dụ mình muốn tạo mới một thread để tính tổng của 2 số bằng cách extend class Thread thì mình sẽ tạo mới một class extend class Thread và override lại phương thức run() như sau:

Để chạy thread trong trường hợp này, chúng ta sẽ tạo mới instance của class Calculator và gọi phương thức start() của đối tượng này để chạy các bạn nhé. Ví dụ:

package com.huongdanjava.javaexample;

public class Example {

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

}

Kết quả:

Khởi tạo và chạy một thread trong Java

Các bạn có thể thấy rõ việc code của chúng ta được execute trong main thread hay là một thread khác bằng cách add thêm một số dòng code như sau:

package com.huongdanjava.javaexample;

public class Calculator extends Thread {

    @Override
    public void run() {
        System.out.println("Calculator : " + Thread.currentThread().getName());

        int a = 2;
        int b = 7;

        int sum = a + b;

        System.out.println(sum);
    }

}
package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

Calculator calculator = new Calculator();
calculator.start();
}

}

Kết quả:

Khởi tạo và chạy một thread trong Java

Nếu các bạn để ý thì sẽ có thắc mắc là nếu chúng ta gọi phương thức run() thay vì phương thức start() của class Calculator thì có sự khác biệt gì? Câu trả lời là nếu các bạn gọi phương thức run() thì code bên trong nó sẽ được execute trong cùng thread của chương trình thay vì một thread mới.

Ví dụ nếu bây giờ mình đổi qua gọi phương thức run() trong hàm main của ứng dụng:

package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

Calculator calculator = new Calculator();
calculator.run();
}

}

các bạn sẽ thấy kết quả như sau:

Khởi tạo và chạy một thread trong Java

Interface Runnable

Với interface Runnable thì class của các bạn cần implement interface này và hiện thực phương thức run() được định nghĩa trong nó.

Trong ví dụ trên, thay vì extend từ class Thread mình có thể implement interface Runnable như sau:

package com.huongdanjava.javaexample;

public class Calculator implements Runnable {

    public void run() {
        System.out.println("Calculator : " + Thread.currentThread().getName());

        int a = 2;
        int b = 7;

        int sum = a + b;

        System.out.println(sum);
    }

}

Để tạo mới thread và chạy ứng dụng của chúng ta trong trường hợp này, các bạn cần tạo mới class Thread với tham số là class implement interface Runnable của chúng ta. Ví dụ như sau:

package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

    Thread thread = new Thread(new Calculator());
    thread.start();
}

}

Kết quả cũng như vậy:

Khởi tạo và chạy một thread trong Java

Tổng kết

Việc sử dụng extend class Thread hay implement interface Runnable là tuỳ vào nhu cầu của các bạn nhưng mình prefer việc implement interfacve Runnable hơn vì trong Java, chúng ta có thể implement nhiều interface khác nhau nhưng chỉ có thể extend từ một class nào đó.

Bài viết gốc được đăng tải tại huongdanjava.com

Có thể bạn quan tâm:

Xem thêm Tuyển Java lương cao hấp dẫn trên TopDev