Có 3 thread:
thread 1: hiển thị một số ngẫu trong khoảng (1, 50) nếu là số chẵn thì đưa giá trị cho thread 2 còn lẻ thì đưa cho thread 3
thread 2: nhận giá trị của thread 1 và hiển thị các ước của số đó
thread 3: nhận giá trị của thread 1 và hiển thị bình phương số đó
giả sử em có một đối tượng So để lưu giá trị và hiển thị
có một vấn đề là khi khi em gọi notify() và wait() cho cả 3 thread thì nó sẽ gọi thread 1 đầu tiên (giả sử trả về số 39) sau đó nó đưa So cho thread 2 hoặc 3 để xử lý nhưng từ đó trở đi thì 2 thread này không bao giờ đưa đối tượng So cho thread 1 để nhận giá trị mới nữa mà chỉ chuyền So qua lại cho nhau và đây là kết quả:
Mã:
# 39
39 là số lẻ.
Bình phương của số này là: 1521
39 là số lẻ.
Bình phương của số này là: 1521
39 là số lẻ.
Bình phương của số này là: 1521
39 là số lẻ.
Bình phương của số này là: 1521
39 là số lẻ.
Bình phương của số này là: 1521
39 là số lẻ.
Bình phương của số này là: 1521
còn khi gọi notifyall() và wait() cho cả 3 thread thì kết quả nó như thế này:
Mã:
# 49
# 49
# 7
7 là số lẻ.
Bình phương của số này là: 49
# 13
# 28
# 36
36 là số chẵn.
Các ước của số này là: 1 2 3 4 6 9 12 18 36
# 0
# 48
48 là số chẵn.
Các ước của số này là: 1 2 3 4 6 8 12 16 24 48
# 16
# 25
# 46
# 30
30 là số chẵn.
Các ước của số này là: 1 2 3 5 6 10 15 30
Vậy có cách nào để khắc phục được hiện tượng này hay không hoặc là có thể chỉ định chỉ gọi thread 2 khi là số chẵn hoặc chỉ thread 3 khi là số lẻ không ạ ?? mong mọi người giúp em với !!
View more random threads:
Vừa qua, Chính phủ đã ban hành Quyết định số 2383/QĐ-TTg ngày 09/12/2013 về việc xếp hạng di tích quốc gia đặc biệt. Theo đó, khu di tích Đường Trường Sơn - Đường Hồ Chí Minh là 1 trong 14 kỷ vật...
Các relic, danh thắng được xếp...