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 !!