您好,
我是多线程的新手,想了解线程交互在下面的场景(PFA图)中的工作原理。方法1在对象1上同步,方法2在对象2上同步,方法3在对象1和2上同步。
由于
答案 0 :(得分:0)
在Java中,如果你有同步方法,它们只在一个对象上同步;这是对象实例this
,如果它是实例方法,或者Class
对象,如果它是静态方法。
从技术上讲,您所说的可以使用经典同步实现:
public static MyClass {
private final FIRST_LOCK = new Object();
private final SECOND_LOCK = new Object();
public void m1() {
synchronized(FIRST_LOCK) {
}
}
public void m2() {
synchronized(SECOND_LOCK) {
}
}
public void m3() {
synchronized(FIRST_LOCK) {
synchronized(SECOND_LOCK) {
}
}
}
}
这意味着如果某个线程执行方法m1
或m2
,那么其他线程就无法执行m3
而反之亦然 - 如果某些线程执行{{1那么没有其他线程可以执行m3
或m1
。