icantech
Lập trình Java
1319
30/11/2023

Thread là gì? Những điều bạn cần biết về Thread trong Java khi bắt đầu

Đối với các lập trình viên Java đã có kinh nghiệm, Thread là công cụ quá quen thuộc. Tuy nhiên với những người mới bắt đầu, để hiểu được Thread là gì, multihreading là gì thì vẫn còn là điều khó khăn. Nếu muốn phát triển các ứng dụng đa luồng trong Java, bạn cần chú trọng học và hiểu về công cụ Thread  này. Trong bài viết này, hãy cùng ICANTECH tìm hiểu những điều bạn cần biết về Thread trong Java qua các ví dụ cụ thể.

1. Thread là gì?

Thread cho phép thực hiện nhiều luồng cùng một lúc, giúp chương trình hoạt động hiệu quả hơn. Các luồng được sử dụng để thực hiện các tác vụ phức tạp trong nền mà không làm gián đoạn chương trình chính. Trong chương trình, mỗi luồng thực thi độc lập và các luồng có thể chạy song song với nhau. Nếu một luồng gặp lỗi tại thời điểm thực thi thì cũng không ảnh hưởng đến việc thực thi của các luồng khác. 

thread-la-gi

Thread có ưu điểm là nhẹ, có thể cung cấp khả năng liên lạc giữa nhiều luồng khác nhau với chi phí thấp. Đồng thời, Thread trong Java còn có thể thực hiện đa tác vụ trong môi trường bộ nhớ dùng chung một cách hiệu quả.

Đi kèm với khái niệm Thread là gì, bạn cũng cần hiểu multihreading là gì. Như đã nói, một chương trình Java gồm nhiều Thread chạy đồng thời, tất cả các Thread chia sẻ một bộ nhớ chung. Quá trình khi nhiều luồng được thực thi song song cùng lúc được gọi là multihreading (đa luồng). Multi Thread trong Java thường được áp dụng phổ biến khi xây dựng các chương trình trò chơi, animation…

2. Các trạng thái của Thread

Cũng giống như một tiến trình thông thường, một luồng tồn tại ở nhiều trạng thái. Vậy các trạng thái của Thread là gì, chúng ta sẽ cùng tìm hiểu ngay sau đây.

thread-la-gi

  • New (mới tạo): Một luồng sẽ có trạng thái này khi nó ghi nhận được thời gian của CPU.
  • Running (thực thi): Một luồng đang được thực thi sẽ có trạng thái running
  • Suspended (tạm dừng): Một luồng sẽ ở trạng thái Suspended khi nó tạm thời không hoạt động hoặc đang được thực thi.
  • Blocked (bị chặn): Một luồng có trạng thái Blocked khi nó đang chờ tài nguyên để tiếp tục.
  • Terminated (đã chấm dứt): Một luồng ở trạng thái này khi tại một thời điểm bất kỳ nào đó, nó dừng thực thi ngay lập tức.

3. Hướng dẫn cách tạo Thread trong Java

Bạn có thể chạy Thread trong Java bằng cách sử dụng lớp Thread. Lớp Thread cung cấp các hàm và các phương thức để tạo và thực hiện các thao tác trên một Thread. Lớp này mở rộng một lớp Thread để triển khai Giao diện có thể chạy được. Bạn sẽ sử dụng các hàm sau để tạo Thread:

  • Thread
  • Thread (Runnable r)
  • Thread (String name)
  • Thread (Runnable r, String name)

3.1. Tạo Thread bằng lớp Thread

Hãy xem ví dụ mẫu code cách Thread như sau:

import java.io.*;

import java.util.*;

 

public class GFG extends Thread {

     // initiated run method for Thread

     public void run()

     {

         System.out.println("Thread Started Running...");

     }

     public static void main(String[] args)

     {

         GFG g1 = new GFG();

          // Invoking Thread using start() method

         g1.start();

     }

}

Output:

Thread Started Running…

3.2. Tạo Thread sử dụng giao diện Runnable

Ví dụ mẫu:

import java.io.*;

import java.util.*;

 

public class GFG implements Runnable {

     // method to start Thread

     public void run()

     {

         System.out.println(

             "Thread is Running Successfully");

     }

      public static void main(String[] args)

     {

         GFG g1 = new GFG();

         // initializing Thread Object

         Thread t1 = new Thread(g1);

         t1.start();

     }

}

Output:
Thread is Running Successfully

3.3. Tạo Thread trong Java sử dụng Thread(String name)
Hãy xem mẫu code ví dụ các tạo Thread sử dụng cú pháp Thread(String name):
import java.io.*;

import java.util.*;

 

public class GFG {

     public static void main(String args[])

     {

         // Thread object created

         // and initiated with data

         Thread t = new Thread("Hello ICANTECH!");

          // Thread gets started

         t.start();

          // getting data of

         // Thread through String

         String s = t.getName();

         System.out.println(s);

     }

}

Output:
Hello ICANTECH!

3.4. Tạo đối tượng Thread bằng Thread(Runnable r,String name)

Ví dụ mẫu code:

import java.io.*;

import java.util.*;

 

public class GFG implements Runnable {

     public void run()

     {

         System.out.println(

             "Thread is created and running successfully...");

     }

     public static void main(String[] args)

     {

         // aligning GFG Class with

         // Runnable interface

         Runnable r1 = new GFG();

         Thread t1 = new Thread(r1, "My Thread");

         // Thread object started

         t1.start();

         // getting the Thread

         // with String Method

         String str = t1.getName();

         System.out.println(str);

     }

}

Output:

My Thread

Thread is created and running successfully…

3.5. Tạo chương trình Java khám phá các trạng thái Thread là gì 

Chúng ta hãy xem hoạt động của các trạng thái Thread, bằng cách triển khai chúng trên các luồng t1 và t2 qua ví dụ:

import java.util.*;

class GFG implements Runnable {

     public void run()

     {

         // implementing try-catch Block to set sleep state

         // for inactive Thread

         try {

             Thread.sleep(102);

         }

         catch (InterruptedException i1) {

             i1.printStackTrace();

         }

         System.out.println(

             "The state for t1 after it invoked join method() on Thread t2"

             + " " + ThreadState.t1.getState());

          // implementing try-catch block

         try {

             Thread.sleep(202);

         }

         catch (InterruptedException i2) {

             i2.printStackTrace();

         }

     }

}

// creation of ThreadState class

// to implement Runnable interface

public class ThreadState implements Runnable {

     public static Thread t1;

     public static ThreadState o1;

     public static void main(String args[])

     {

         o1 = new ThreadState();

         t1 = new Thread(o1);

         System.out.println("post-spanning, state of t1 is"

                           + " " + t1.getState());

         // lets invoke start() method on t1

         t1.start();

         // Now,Thread t1 is moved to runnable state

         System.out.println(

             "post invoking of start() method, state of t1 is"

             + " " + t1.getState());

     }

     public void run()

     {

         GFG g1 = new GFG();

         Thread t2 = new Thread(g1);

         // Thread is created and its in new state.

         t2.start();

         // Now t2 is moved to runnable state

         System.out.println(

             "state of t2 Thread, post-calling of start() method is"

             + " " + t2.getState());

         // create a try-catch block to set t1 in waiting

         // state

         try {

             Thread.sleep(202);

         }

         catch (InterruptedException i2) {

             i2.printStackTrace();

         }

         System.out.println(

             "State of Thread t2 after invoking to method sleep() is"

             + " " + t2.getState());

         try {

             t2.join();

             System.out.println(

                 "State of Thread t2 after join() is"

                 + " " + t2.getState());

         }

         catch (InterruptedException i3) {

             i3.printStackTrace();

         }

         System.out.println(

             "state of Thread t1 after completing the execution is"

             + " " + t1.getState());

     }

}

Output:

post-spanning, state of t1 is NEW

post invoking of start() method, state of t1 is RUNNABLE

state of t2 Thread, post-calling of start() method is RUNNABLE

The state for t1 after it invoked join method() on Thread t2 TIMED_WAITING

State of Thread t2 after invoking to method sleep() is TIMED_WAITING

State of Thread t2 after join() is TERMINATED

state of Thread t1 after completing the execution is RUNNABLE

4. Lời Kết

Vậy là chúng ta đã cùng nhau tìm hiểu Thread là gì cũng như cách tạo Thread trong Java. Hi vọng rằng những thông tin được chia sẻ trong bài viết sẽ giúp bạn nắm vững kiến thức về Thread. 

Cảm ơn bạn đã đọc bài viết, nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình dưới đây tại ICANTECH nhé

Nguồn ảnh: ICANTECH.

Share
Tags
Lập trình Java

Bài tương tự