Thread trong java là gì

-

Java, một trong những ngôn ngữ lập trình lâu đời và phổ biến nhất trên toàn thế giới, với sức mạnh vượt trội cũng như kho tài liệu hỗ trợ khổng lồ của mình, Java có thể giúp các lập trình viên làm hầu hết các công việc như lập trình web, lập trình game, lập trình ứng dụng di động, lập trình nhúng và hướng đối tượng…

Trong Java có rất nhiều thuật ngữ, rất nhiều hàm, rất nhiều function mà bạn phải đầu tư, nghiên cứu, học tập kỹ càng nếu như muốn làm chủ được nó. Và một trong số đó chính là Thread (luồng). Vậy Thread là gì, vòng đời của một Thread trong Java như thế nào?Các quyền ưu tiên trong Java? Các phương thức của lớp Thread và các khái niệm chủ yếu của Thread trong Java mà bạn nên biết ? Tất cả những phần này sẽ được chúng tôi phân tích trong bài viết dưới đây, hãy cùng nhau tìm hiểu nhé các bạn!


Mục Lục


Định nghĩa về Thread trong Java?

*
*
*
Vòng đời của Thread trong Java

Mỗi một Thread đều đi qua các giai đoạn khác nhau, nó được sinh ra, bắt đầu, chạy và sẽ tự động hủy ngay sau đó. Một vòng đời của Thread được biểu diễn qua sơ đồ sau đây: Chúng ta cùng nhau quan sát và giải thích một số khái niệm có trong sơ đồ này nhé!

New: Đây là trạng thái đầu tiên của một Thread khi mới bắt đầu vòng đời của nó. Trạng thái này tồn tại cho tới khi chương trình bắt đầu chạy. Runnable: Khi một Thread được sinh và và bắt đầu chạy, nó sẽ trở thành runnable. Và ở trong trạng thái này, nó được xem như đang thực hiện tác vụ của chính mình.

Bạn đang xem: Thread trong java là gì

Waiting: Đôi khi, một thread sẽ ở trong trạng thái waiting (chờ đợi) để một thread khác thực hiện một tác vụ nào đó. Và nó sẽ tự động chuyển về trạng thái runnable chỉ khi thread khác ra hiệu. Và sau khi thread kia thực hiện xong tác vụ của mình, nó sẽ tự động khởi tạo và thực hiện nhiệm vụ của mình.Timed waiting: Một thread trong trạng thái runnable có thể chuyển thành trạng thái timed waiting trong một khoảng thời gian nào đó. Thời gian này ngắn hay dài tùy thuộc vào tốc độ xử lý của thread trước đó.Terminated: Một thread trong trạng thái runnable có thể đi vào trạng thái terminated khi nó đã hoàn thành xong tất cả các tác vụ của nó.

Xem thêm: Ngô Kiến Huy 8 Năm Sau Scandal Có Con Với Thụy Anh Sinh Năm Bao Nhiêu

Các quyền ưu tiên của Thread trong Java

Mỗi một Thread đều có quyền ưu tiên nhất định để giúp cho hệ điều hành xác định chính xác thứ tự thread nào được xử lý trước, thread nào được xử lý sau. Các thread nào có quyền ưu tiên cao hơn, quan trọng hơn sẽ được hệ thống cấp phát bộ nhớ và thời gian để xử lý trước. Và trong Java, quyền ưu tiên này được thể hiện ở một dãy giữa Min-Priority (được xem là hằng số 1) và Max-Priority (hằng số 10). Và theo mặc định, mỗi một Thread sẽ được cung cấp một quyền ưu tiên Norm-Priority (hằng số 5).

Để có thể hiểu hơn về cách thức hoạt động của một thread trong Java như thế nào, các bạn hãy quan sát đoạn code sau, các thread này được tạo ra khi triển khai Runnable Interface trong Java.

class RunnableDemo implements Runnable {

private Thread t;

private String threadName;

RunnableDemo( String name){

threadName = name;

System.out.println(“Creating ” + threadName );

}

public void run() {

System.out.println(“Running ” + threadName );

try {

for(int i = 4; i > 0; i–) {

System.out.println(“Thread: ” + threadName + “, ” + i);

// De thread ngung trong choc lat.

Thread.sleep(50);

}

} catch (InterruptedException e) {

System.out.println(“Thread ” + threadName + ” interrupted.”);

}

System.out.println(“Thread ” + threadName + ” exiting.”);

}

public void start ()

{

System.out.println(“Starting ” + threadName );

if (t == null)

{

t = new Thread (this, threadName);

t.start ();

}

}}public class TestThread {

public static void main(String args<>) {

RunnableDemo R1 = new RunnableDemo( “Thread-1”);

R1.start();

RunnableDemo R2 = new RunnableDemo( “Thread-2”);

R2.start();

}

}

Một số phương thức quan trọng có sẵn trong lớp Thread của ngôn ngữ Java

public void start(): Bắt đầu thread trong một path riêng rẽ, sau đó triệu hồi phương thức run() trên đối tượng Thread nàypublic void run(): Nếu đối tượng Thread này được khởi tạo bởi sử dụng một đối tượng Runnable, phương thức run() sẽ được triệu hồi public final void setName(String name): Thay đổi tên của đối tượng Thread. Cũng có một phương thức getName() để thu nhận tên nàypublic final void setPriority(int priority): Thiết lập quyền ưu tiên của đối tượng Thread này. Giá trị có thể có nằm trong khoảng từ 1 tới 10public final void setDaemon(boolean in): Một tham số true chứng tỏ Thread này như là một Daemon threadpublic final void join(long millis): Thread hiện tại triệu hồi phương thức này trên thread thứ hai, làm cho Thread hiện tại block tới khi thread thứ hai kết thúc hoặc sau một số lượng mili giây đã xác địnhpublic void interrupt(): Ngắt thread này, làm cho nó tiếp tục thực thi nếu nó bị block vì bất cứ lý do gìpublic final boolean isAlive(): Trả về true nếu thread này là alive, mà là bất cứ thời gian nào sau khi thread này đã được bắt đầu nhưng trước khi nó run tới khi kết thúcpublic static void yield(): Làm cho thread đang chạy hiện tại chuyển tới bất kỳ thread nào khác có cùng quyền ưu tiên mà đang đợi để được ghi lịch trìnhpublic static void sleep(long millis): Làm cho thread đang chạy hiện tại block trong ít nhất một số lượng mili giây đã xác địnhpublic static boolean holdsLock(Object x): Trả về true nếu thread giữ lock trên Object đã chopublic static Thread currentThread(): Trả về một tham chiếu tới thread đang chạy hiện tại, mà là thread mà triệu hồi phương thức nàypublic static void dumpStack(): In ra stack trace cho thread đang chạy hiện tại. Nó rất hữu ích khi debugging một ứng dụng đa luồng

Để nắm rõ và sử dụng thành thạo tất cả các phương thức này trong Java, chắc chắn các bạn phải thực hành thật nhiều, tìm hiểu kỹ cách thức hoạt động để sử dụng chính xác từng phương thức trong từng trường hợp cụ thể. Quả thật không đơn giản chút nào phải không các bạn. Và ở phần cuối cùng của bài viết này, chúng tôi xin chia sẻ một số khái niệm về Thread trong Java, đây chỉ là những đề mục khái niệm cơ bản, còn đi sâu nghiên cứu về những khái niệm này, sẽ có một bài viết khác phân tích chi tiết hơn nhé.

Một số khái niệm về Thread trong Java

Thread Synchronization trong JavaInter Thread Communication trong JavaThread deadlock trong JavaThread Control trong Java

Hy vọng những kiến thức trên sẽ giúp ích rất nhiều cho các bạn trong công việc, hãy học từng ngày, từng giờ, từng chút một, để có thể nắm vững tất cả những gì tinh túy nhất trong ngôn ngữ lập trình Java nhé. Chúc các bạn thành công!