Thread.start và Thread.run

Trong bài trước, chúng ta đã tìm hiểu qua các cách để tạo ra các luồng (thread) trong Java. Ở bài viết này, chúng ta sẽ tìm hiểu các phương thức để chạy các luồng này và sự khác nhau giữa các phương thức đó.

Như chúng ta đã biết, code xử lý của các thread được khai báo bên trong phương thức run() của thread đó. Java cung cấp cho chúng ta 2 phương thức để chạy phương thức này là:

  • Thread.start()
  • Thread.run()

Cả 2 phương thức này đều có chức năng gọi đến phương thức run() của thread và thực thi các dòng code bên trong phương thức này. Vậy sự khác nhau giữa chúng là:

  • Khi chúng ta gọi phương thức start(), 1 thread mới sẽ được tạo và code trong phương thức run() sẽ được thực thi trong thread mới này. Nếu chúng ta gọi phương thức run(), không có thread mới nào được tạo và code trong run() sẽ được thực thi tại thread hiện tại.
  • Ngoài ra, chúng ta không thể gọi phương thức start() 2 lần trên đối tượng thread, việc này sẽ quăng ra lỗi IllegalStateException trong Java. Trong khi đó, chúng ta có thể gọi phương thức run() 2 lần trên đối tượng thread.

Ví dụ:

Đoạn code dưới đây sẽ minh họa cho chúng ta thấy sự khác nhau giữa Thread.start()Thread.run():

public class StartvsRunDemo {
    private static class Task implements Runnable{
        private String caller;
   
        public Task(String caller){
            this.caller = caller;
        }
  
        @Override
        public void run() {
            System.out.println("Caller: "+ this.caller + " and code on this Thread is exeuted by : " + Thread.currentThread().getName());
        }
    }

    public static void main(String[] args){
        Thread startThread = new Thread(new Task("start"));
        Thread runThread = new Thread(new Task("run"));
        startThread.start();
        runThread.run();
    }
}

Kết quả:

Caller: run and code on this Thread is executed by : main
Caller: start and code on this Thread is executed by : Thread-0

Chúng ta kết thúc bài tìm hiểu tại đây. Chúc các bài thành công!

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.