Rate this post

Một Thread trong Java là chương trình được thực hiện trong khi chương trình đang được thực thi. Nói chung, tất cả các chương trình đều có ít nhất một Thread, được gọi là Thread chính, được cung cấp bởi JVM hoặc Máy ảo Java khi bắt đầu thực thi chương trình. Tại thời điểm này, khi Thread chính được cung cấp, phương thức main() được gọi bởi Thread chính.

Các bài viết liên quan:

Một Thread là một Thread thực thi trong một chương trình. Nhiều Thread thực thi có thể được chạy đồng thời bởi một ứng dụng chạy trên Máy ảo Java. Mức độ ưu tiên của mỗi Thread khác nhau. Các Thread ưu tiên cao hơn được thực thi trước các Thread ưu tiên thấp hơn.

Thread rất quan trọng trong chương trình vì nó cho phép nhiều hoạt động diễn ra trong một phương thức duy nhất. Mỗi Thread trong chương trình thường có bộ đếm chương trình, ngăn xếp và biến cục bộ riêng.

Tạo một Thread trong Java

Một Thread trong Java có thể được tạo theo hai cách sau:

Extending java.lang.Thread class

Trong trường hợp này, một Thread được tạo bởi một lớp mới mở rộng lớp Thread, tạo một thể hiện của lớp đó. Phương thức run() bao gồm chức năng được cho là do Thread triển khai.

Dưới đây là một ví dụ để tạo một Thread bằng cách mở rộng lớp java.lang.Thread.

Ở đây, start() được sử dụng để tạo một Thread mới và làm cho nó có thể chạy được. Chuỗi mới bắt đầu bên trong phương thức void run().

Implementing Runnable interface

Đây là phương pháp dễ dàng để tạo một Thread giữa hai Thread. Trong trường hợp này, một lớp được tạo để triển khai giao diện có thể chạy được và sau đó là phương thức run().

Mã để thực thi Thread phải luôn được viết bên trong phương thức run().

Đây là một mã để làm cho bạn hiểu nó.

Phương thức start() được sử dụng để gọi phương thức void run(). Khi start() được gọi, một ngăn xếp mới được cấp cho Thread và run() được gọi để giới thiệu một Thread mới trong chương trình.

Vòng đời của một Thread trong Java

Vòng đời của một Thread trong Java đề cập đến các biến đổi trạng thái của một Thread bắt đầu bằng sự ra đời của nó và kết thúc bằng sự chết của nó. Khi một cá thể Thread được tạo và thực thi bằng cách gọi phương thức start() của lớp Thread, Thread sẽ chuyển sang trạng thái có thể chạy được. Khi các phương thức sleep() hoặc wait() của lớp Thread được gọi, Thread sẽ chuyển sang chế độ không thể chạy được.

Thread chuyển từ trạng thái không chạy được sang trạng thái chạy được và bắt đầu thực thi câu lệnh. Chuỗi chết khi thoát khỏi quy trình run(). Trong Java, các chuyển đổi trạng thái Thread này được gọi là vòng đời của Thread.

Về cơ bản có 4 giai đoạn trong vòng đời của một Thread, như được đưa ra dưới đây:

  1. New
  2. Runnable
  3. Running
  4. Blocked (Non-runnable state)
  5. Dead

New

Khi chúng ta sử dụng lớp Thread để xây dựng một thực thể Thread, Thread được sinh ra và được định nghĩa là ở trạng thái Mới. Nghĩa là, khi một Thread được tạo, nó sẽ chuyển sang trạng thái mới, nhưng phương thức start() trên cá thể vẫn chưa được gọi.

Runnable

Một Thread ở trạng thái có thể chạy được chuẩn bị để thực thi mã. Khi hàm start() của một Thread mới được gọi, nó sẽ chuyển sang trạng thái có thể chạy được.

Trong môi trường có thể chạy được, Thread đã sẵn sàng để thực thi và đang chờ sự sẵn sàng của bộ xử lý (thời gian CPU). Tức là tiểu trình đã vào hàng đợi (dòng) tiểu trình chờ thực hiện.

Running

Việc chạy ngụ ý rằng bộ xử lý (CPU) đã chỉ định một khe thời gian cho Thread để thực thi. Khi một Thread từ trạng thái có thể chạy được chọn để thực hiện bởi bộ lập lịch Thread, nó sẽ tham gia trạng thái đang chạy.

Ở trạng thái đang chạy, bộ xử lý phân bổ thời gian cho Thread để thực thi và chạy thủ tục chạy của nó. Đây là trạng thái mà Thread trực tiếp thực hiện các hoạt động của nó. Chỉ từ trạng thái có thể chạy được, một Thread mới chuyển sang trạng thái đang chạy.

Blocked (Non-runnable state)

Khi Thread đang hoạt động, tức là, đối tượng lớp Thread vẫn tồn tại, nhưng nó không thể được chọn để thực thi bởi bộ lập lịch. Nó hiện không hoạt động.

Dead

Khi hàm run() của một Thread kết thúc việc thực thi các câu, nó sẽ tự động chết hoặc đi vào trạng thái chết. Nghĩa là, khi một Thread thoát khỏi quy trình run(), nó sẽ bị chấm dứt hoặc bị hủy. Khi hàm stop() được gọi, một Thread cũng sẽ chết.

Ưu tiên Thread Java

Số Thread dịch vụ được gán cho một Thread nhất định được gọi là mức độ ưu tiên của nó. Bất kỳ Thread nào được tạo trong JVM đều được ưu tiên. Thang điểm ưu tiên chạy từ 1 đến 10.

1 được gọi là ưu tiên thấp nhất.

5 được gọi là ưu tiên tiêu chuẩn.

10 đại diện cho mức độ ưu tiên cao nhất.

Mức độ ưu tiên của Thread chính được đặt thành 5 theo mặc định và mỗi Thread con sẽ có cùng mức độ ưu tiên với Thread gốc của nó. Chúng ta có khả năng điều chỉnh mức độ ưu tiên bất kỳ Thread nào, cho dù đó là Thread chính hay Thread do người dùng xác định. Bạn nên điều chỉnh mức độ ưu tiên bằng cách sử dụng các hằng số của lớp Thread, như sau:

  1. Thread.MIN_PRIORITY;
  2. Thread.NORM_PRIORITY;
  3. Thread.MAX_PRIORITY;

Dưới đây là một chương trình để hiểu Mức độ ưu tiên của Thread.

Các Constructor được sử dụng phổ biến nhất trong Thread Class

Lớp Thread bao gồm các hàm tạo và phương thức để tạo và hoạt động trên các Thread. Thread mở rộng Đối tượng và triển khai giao diện Runnable.

  1. Thread()

Hàm tạo Thread() mặc định được sử dụng để tạo một lớp Thread mới.

  1. Thread (String str)

Một đối tượng Thread được tạo và một tên được cung cấp cho cùng một đối tượng.

  1. Thread (Runnable r)

Trong loại hàm tạo này, tham chiếu Runnable được truyền và một đối tượng Thread mới được tạo.

  1. Thread (Runnable r, String r)

Chúng ta có thể sử dụng hàm tạo này để tạo một đối tượng Thread mới bằng cách chuyển một tham chiếu Runnable làm tham số đầu tiên và cũng cung cấp tên cho Thread mới được tạo.

Đa Thread trong Java

Trong Java, đa Thread là phương pháp chạy hai hoặc nhiều Thread cùng lúc để tối đa hóa việc sử dụng CPU. Do đó, nó thường được gọi là Đồng thời trong Java. Mỗi Thread chạy song song với các Thread khác. Vì một số Thread không gán các vùng bộ nhớ khác nhau nên chúng tiết kiệm bộ nhớ. Hơn nữa, chuyển đổi giữa các Thread mất ít thời gian hơn.

Trong Java, đa Thread tăng cường cấu trúc chương trình bằng cách làm cho nó đơn giản và dễ điều hướng hơn. Các Thread tổng quát này có thể được sử dụng trong các ứng dụng đa phương tiện có máy chủ cao để dễ dàng thay đổi hoặc nâng cao cấu hình của các cấu trúc phức tạp này.

Đây là một ví dụ về Đa Thread trong Java.

Cách xử lý Thread Deadlock

Deadlock là tình huống trong đó hai hoặc nhiều Thread bị kẹt chờ nhau vô thời hạn. Khi một số Thread cần khóa giống nhau nhưng nhận chúng theo thứ tự riêng biệt, Deadlock xảy ra. Trong chương trình đa Thread Java, tình trạng Deadlock có thể xảy ra do từ khóa được đồng bộ hóa khiến Thread thực thi bị chặn trong khi chờ khóa, được liên kết với đối tượng đã chỉ định.

Để tránh Deadlock, hãy đảm bảo rằng khi bạn nhận được một số khóa, bạn luôn nhận được chúng theo cùng một thứ tự trên tất cả các Thread. Đây là một ví dụ về mã có thể dẫn đến Deadlock.

Mã này có thể sẽ dẫn đến Deadlock cho hai chuỗi được tạo. Khóa trên đối tượng người call1 và call2 đã được sở hữu bởi các Thread tương ứng buộc các Thread phải chờ nhau để mở khóa các khóa đó. Điều này sẽ kích hoạt Deadlock và ngăn hàm callMe() được gọi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now