У меня есть три объекта: A, B и C. Мне нужна такая синхронизация, чтобы блоки, синхронизированные с объектами A и B, могли выполняться параллельно, и когда выполняется блок, синхронизированный с объектами A, или блок, синхронизированный с объектами B,блок, синхронизированный с объектами C, не может быть выполнен.И когда выполняется блок, синхронизированный с объектами C, блоки, синхронизированные с объектами A и B, не могут быть выполнены.Я пытался использовать объект C в качестве списка, а объекты A и B в качестве объектов, хранящихся в этом списке, но это не сработало.Подскажите пожалуйста, можно ли как-то настроить такую синхронизацию?
import java.util.ArrayList;
import java.util.List;
public class Threads {
public List<Res> lst = new ArrayList();
public void startThreads(){
lst.add(new Res());
lst.add(new Res());
Thread t1 = new Thread(new work1());
Thread t2 = new Thread(new work2());
Thread t3 = new Thread(new work3());
t1.start();
t2.start();
t3.start();
}
public class work1 implements Runnable {
@Override
public void run() {
Method1();
}
}
public class work2 implements Runnable {
@Override
public void run() {
Method2();
}
}
public class work3 implements Runnable {
@Override
public void run() {
Method3();
}
}
public void Method1(){
synchronized (lst.get(0)/*obj A*/){
//some work
}
}
public void Method2(){
synchronized (lst.get(1)/*obj B*/){
//some work
}
}
public void Method3(){
synchronized (lst)/*obj C*/{
//some work
}
}
}
Class Res:
public class Res {
public int number = 0;
}
Class Main:
public class Main {
public static void main(String[] args) throws InterruptedException {
Threads t = new Threads();
t.startThreads();
}
}