Làm quen với điều khiển luồng trong Java (phần 1)

                                   Đa luồng trong java (Phần 1)


I.Luồng trong java.

1.Luồng là gì : Luồng là đơn vị điều khiển nhỏ nhất trong java dùng để thực hiện một tác vụ đơn , luồng là do máy áo java quản lý. Trong một chương trình ngoài luồng chính còn có thể có các luồng khác thực thi đồng thời.
Ví dụ như trong chương trình phát nhạc thì chúng ta có luồng chính là luồng nghe nhạc còn các luồng phụ như luồng  pause , next

-> Khi phát nhạc thì chúng ta có thể vừa nghe nhạc vừa thao tác vì các luồng này là riêng biệt.

2.Cách tạo và quản lý luồng : Có 2 cách để tạo ra luồng là kế thừa từ lớp Thread và Implement từ Giao Diện (Interface) của runnable.

Nói rõ hơn một tý : 
-> Tạo ra luồng bằng cách tạo một đối tượng ở lớp kế thừa Thread (Lớp này không hỗ trợ đa kế thừa).

-> Khi nào bạn phải mở rộng từ giao diện Runnable khi chúng ta muốn nhiều hơn 1 lớp kế thừa từ lớp Thread (như đã nói bên trên lớp thread không hỗ trợ đa kế thừa).


II.Đi sâu hơn về cách tạo ra luồng.


1.Tạo ra luồng bằng cách tạo một đối tượng được kế thùa từ lớp Thread.
-> Đầu tiên chúng ta tạo một lớp kết thừa từ lớp thread.
-> Viết các phương thức cần thực thi trong hàm Run() đây là hàm ghi đè của lớp Thread
-> Trong hàm main chúng ta tại các biến tham chiếu đến lớp kế thừa từ lớp thread
-> Dùng từ khóa Start để thực thi các hành động trong hàm run.


+ Chú ý : Chúng ta thực thi các hành động trong Run() nhưng lại gọi Start vì đây là một phương thức đặc biệt của lớp Thread cho phép cấp phát thêm luồng để chạy chương trình theo ý muốn . nếu chúng ta không sử dụng từ khóa start mà lại gọi hàm run thì chương trình chỉ chạy trên 1 luồng duy nhất là luồng của phương thức run() -> Thế thì không phải đa luồng.



Hàm main :


Kết quả :




2.Tạo ra luồng bằng cách tạo ra một lớp Implement từ Runnable.

-> Khai báo Implement Runnable

-> Tự động ghi đè phương thức run();

-> Chúng ta tạo ra biến tham chiếu từ lớp mở rộng rồi làm theo cú pháp sau để gọi phương thức start. 
Thread ten_bien = new Thread(ten_bien_tham_chieu_lop_mo_rong);
ten_bien.start();




Hàm main :

Kết quả :


3.Một số thông tin liên quan đến luồng

-> Thread ID : Cái này là định danh cho luồng dùng để phân biệt các luồng cùng tập với nhau hay cùng tiến trình cái này do máy ảo java quy định chúng ta không thể can thiệp được. Chúng ta có thể lấy Id luồng qua phương thức getID.

-> Thread Name : Cái này là tên luồng do lập trình viên đặt lấy và thay đổi thông qua lần lượt 2 thuộc tính là getName() và setName(String name).


=> Quan trọng : Độ ưu tiên của luồng (Piority)
+ Chúng ta sử dụng từ khóa Piority để quyết định sự ưu tiên các luồng được thực hiện.Đây là thông số quyết định để CPU cấp phát cho các luồng ta dùng một phương thức là 
void setPiority();
ThreadMax Piority = 10;
ThreadNomar Piority = 5;
Thread Min Piority = 1;


4.Sử dụng Thread khi nào và sử dụng Interface Runnable khi nào ?

=> Khi chúng ta muốn chia sẻ biến giữa các tiểu trình() của ta thì chúng ta nên implement từ Runnable 
=> Khi không cần chia sẻ thì nên dùng Extends Thread

Vậy chia sẻ biến giữa các tiểu trình là gì ?


=>Chúng ta tạo một lớp mới 






=> Chúng ta có thể nhận thấy biến x được dùng chung giữa 2 tiến trình 1 và 2 qua lại với nhau

Biến x được thay đổi giá trị qua lại giữa 2 tiến trình , tiến trình 1 gán chưa xong thì tiến trình 2 nhảy vào gán nên có sự bất đồng bộ giá trị của X.



Nhận xét

Bài đăng phổ biến