Threading trong Java- Các thông tin cơ bản
11/01/2023 01:25
Phân luồng là khả năng cho các phần khác nhau của chương trình chạy đồng thời. Phần hiện đang chạy của chương trình có thể bắt đầu một luồng khác sẽ chạy mã ở chế độ nền khi mã ban đầu sinh ra luồng tiếp tục thực thi.
Phân luồng là khả năng cho các phần khác nhau của chương trình chạy đồng thời. Phần hiện đang chạy của chương trình có thể bắt đầu một luồng khác sẽ chạy mã ở chế độ nền khi mã ban đầu sinh ra luồng tiếp tục thực thi. Điều này cho phép chạy các thủ tục phức tạp mà không làm gián đoạn việc thực thi phần còn lại của chương trình.
Các phần khác nhau của chương trình đang hoạt động đồng thời được gọi là “luồng” và mã bắt đầu thực thi trước, bắt đầu các quy trình khác này, thường được gọi là “luồng chính”. Hai cách mà các luồng có thể được thực hiện trong Java là với các lớp hoặc với các giao diện .
Điều kiện
Vì Java hỗ trợ chạy nhiều luồng cùng một lúc nên luôn có nguy cơ gây ra sự cố tương tranh hoặc điều kiện tương tranh. Điều này xảy ra khi một biến cụ thể đang được truy cập và cập nhật bởi nhiều luồng (đang chạy độc lập và có thể chưa hoàn tất việc thực thi). Nên tránh các biến như vậy trừ khi được xác nhận rằng các luồng có thể sửa đổi chúng đã hoàn thành việc thực hiện.
Sử dụng lớp chủ đề
Các luồng có thể được định nghĩa trong một lớp mở rộng Thread
lớp đó và ghi đè .run()
phương thức của nó:
cú pháp
public class MyThread extends Thread {
public void run() {
// Code to run in separate thread
}
}
Mã trong .run()
phương thức là những gì sẽ chạy trong một luồng riêng biệt khi luồng đó được bắt đầu. Chuỗi được bắt đầu bằng cách tạo một thể hiện của lớp này và gọi .start()
phương thức của nó:
Triển khai Giao diện Runnable
Một cách khác để tạo chủ đề là triển khai Runnable
giao diện:
cú pháp
public class MyRunnable implements Runnable {
public void run() {
// Code to run in separate thread
}
}
Xin nhắc lại, mã trong .run()
phương thức sẽ chạy trong một luồng riêng biệt khi luồng đó được bắt đầu. Chuỗi được bắt đầu bằng cách tạo một thể hiện của lớp này và chuyển nó tới hàm tạo của Thread
lớp, sau đó gọi .start()
phương thức trên thể hiện đó của Thread
lớp.