Xin chào mọi người! Em đang tìm hiểu về đa luồng và đồng bộ hóa trong Java. Vấn đề em đang thắc mắc là: em sử dụng 1 đối tượng o ở 3 luồng khác nhau. Em muốn đối tượng này được đồng bộ hóa ở luồng số 1 thôi. Có nghĩa là khi luồng số 1 đang thao tác trên đối tượng o thì 2 luồng còn lại sẽ phải chờ còn nếu đối tượng o đang được thao tác trên 2 luồng số 2 hoặc 3 thì các luồng khác không cần chờ. Em có thể làm việc bằng cách nào ạ. Em đã thử 2 cách nhưng không được.
Cách 1: Đặt synchronized ở cả 3 luồng. Cách này cả 3 luồng sẽ phải chờ nhau.
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized(o){
process1(o);
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized(o){
process2(o);
}
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
synchronized(o){
process3(o);
}
}
});
thread1.start();
thread2.start();
thread3.start();
Cách 2: Chỉ đặt synchronized ở luồng số 1. Cách này thì cũng như hoàn toàn không đồng bộ
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized(o){
process1(o);
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
process2(o);
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
process3(o);
}
});
thread1.start();
thread2.start();
thread3.start();
Liệu em có thể chỉ đồng bộ trên luồng số 1 được không ạ? Mong được mọi người chỉ giáo. Em xin cảm ơn!