HƯỚNG DẪN CÁCH SỬ DỤNG COUNTDOWNLATCH TRONG JAVA

31-01-2018 14:33

Countdownlatch là một lớp trong Java dùng để đếm. Trong khi chúng ta hoàn toàn có thể thực hiện việc đếm bằng các cách khác nhau vậy tại sao Java lại tạo ra một lớp riêng để đếm? Trong lập trình đa luồng, việc đêm sẽ trở nên rất phức tạp và khó khăn, khi muốn đếm chúng ta phải sử dụng đến đồng bộ phương thức nếu không việc đếm sẽ không được chính xác, lúc này, trong hệ thống các luồng đang được xử lý song song và các biến sẽ được sử dụng một cách không tuần tự, lúc đó kết quả sẽ không chính xác và không như ta mong muốn.

Để hiểu rõ hơn thì các bạn hãy theo dõi ví dụ sau đây nhé!

Các khóa học lập trình 

Khóa học Lập trình website với Java

Thiết kế và lập trình web PHP chuyên nghiệp

 

 

Kết quả sau khi biên dịch chương trình:

 

 

Như đoạn code trên thì khi thực hiện chương trình, kết quả chúng ta mong muốn là giá trị biến count sẽ bằng 0, vì thread1 và thread2 là hai luồng chạy song song nên kết quả biến count sau mỗi lần biên dịch sẽ khác nhau. Biến count được cả hai thread1 và thread2 cùng tác động và thay đổi giá trị nên sẽ xảy ra trường hợp thread1 chưa xử lý xong (giảm count đi 1) thì thread đã thực hiện tác động tới biến count nên giá trị count sẽ thay đổi không theo ý muốn.

Để giải quyết trường hợp này, chúng ta có thể sử dụng từ khóa synchronized để đảm bảo việc biến count đi 1 sẽ được xử lý một cách tuần tự, tức là tại một thời điểm chỉ có duy nhất ột Thread được thao tác với biến count:

 

 

Kết quả sau khi biên dịch chương trình:

 

 

Đoạn code này cho thấy, từ khóa synchronized ở phương thức giamCount() bảo đảm rằng tại một thời điểm chỉ có duy nhất 1 Thread được gọi vào hàm để xử lý.

Lập trình ứng dụng di động Android

Khóa học Lập trình Website với ASP.Net

Ngoài ra, nội dung chính của phần này là chúng ta có thể dùng CountDownLatch để giải quyết vấn đề này:

 

 

Kết quả sau khi biên dịch chương trình:

 

Giải thích hoạt động của chương trình này:

Đoạn code public CountDownLatch count =new CountDownLatch(2000), sẽ khởi tạo đối tượng CountDownLatch có tên là count với giá trị 2000. Để giảm dần giá trị của count thì lớp CountDownLatch cung cấp cho chúng ta phương thức countDown(): count.countDown();. Ngoài ra, chúng ta còn thấy dòng code count.await(), phương thức await() sẽ đợi tất cả các tiến trình xử lý của CountDownLatch hoàn thành.

Trong bài này, các bạn đã được hướng dẫn để tìm hiểu về lớp CountDownLatch trong Java. Hy vọng rằng bài hướng dẫn này sẽ mang đến thật nhiều những điều bổ ích cho tất cả các bạn!

Ban Truyền thông ITPlus Academy

Bài viết cùng chủ đề