Concurrent trong java


Hê lô các b. ai có thể giải thích giúp mình tại sao lại có kết quả trên được không??
Thanks các bạn nhìu

Uhm, cậu thử giải thích cho bọn tớ xem cậu hiểu gì về code này, và kỳ vọng gì ở nó được không? :smile:

3 Likes

Không học Java nhưng nhìn tên hàm thì mình đoán là nó dùng để lấy tên Thread hiện tại thì phải !

Đúng là lấy tên của luồng thực thi hiện tại, nhưng bạn ấy đang thắc mắc vì sao 4 luồng chạy kiểu gì để in một biến tăng dần, nhưng giá trị lại in ra không phải là tăng dần mà lộn xộn.

@Tung_Le_Duy đặt tên trường (field) trùng với từ khóa kìa bạn.

Rõ là concurrent = đồng thời tất cả các luồng sẽ đồng thời thực hiện, chứ đâu phải thực hiện tuần tự (sequent). Mà việc thực hiện này sẽ không đồng bộ nên việc luồng nào xong trước sẽ không biết trước được.

2 Likes

@SITUVN.gcd Luồng nó sẽ thực hiện không đồng bộ, nhưng đều access vào 1 biến var = 0 trong reference object someThing.
Vậy thì trong cái kết quả chạy trên, luồng 4 sẽ in ra đầu tiên với var = 4(vì nó cộng biến a =1 chậm nhất nhưng in ra nhanh nhất) -> lúc này biến var có value = 4
Vậy tại sao luồng 1 cộng biến a =1 sớm nhất nhưng in ra chậm nhất chỉ in kết quả ra = 1, mà k phải = 4 ạ. Bạn giải thích mình với. Cám ơn ạ!

@library Mình hiểu về code giống như SITUVN.gcd nhưng vẫn còn thắc mắc giống cmt trên nhé :smiley: :smiley:

Các luồng (thread) chạy song song nhau do đó sẽ không thể xác định được thứ tự thực hiện các câu lệnh giữa các luồng. Điều này phụ thuộc vào scheduler của HĐH. Do đó không có gì lạ nếu luồng 4 in ra kết quả trước còn luồng 1 lại in kết quả sau. Bạn biết đấy, lệnh in ra màn hình không phải là 1 câu lệnh đơn mà là 1 chuỗi các thao tác do đó chẳng có gì đảm bảo thứ tự in ra giữa các luồng khác nhau cả
Còn vì sao kết quả cộng lại đúng đó là do các luồng không được start cùng lúc do đó có khả năng code từng luồng được start lần lượt. Bạn thử cho bên trong luồng chạy 1 đoạn code phức tạp 1 chút khác VD loop từ 1 đến 1tr trước rồi mới thực hiện phép cộng thì sẽ thấy kết quả có thể loạn hơn

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?