Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
476 views
in Technique[技术] by (71.8m points)

不同方法中的synchronized的锁之间会有影响吗?

public void A(){
     synchronized(Object.class){
        //业务  
     }
}
public void B(){
     synchronized(Object.class){
        //业务
     }
}

想问一下,AB两个方法,用的是都是Object.class作为锁,如果两个线程分别访问AB两个方法,A方法中的锁被占用,B方法synchronized中的业务会执行吗,两个Object是同一把锁吗


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Object类对象只有一个,一个方法锁住了,另一个就要阻塞。
A方法锁住了,B方法肯定阻塞,等到A方法释放锁,B方法获取锁以后才能执行。
下面的代码是顺序执行的。

    public static void main(String[] args) {
        new Thread(No26_removeDuplicates::A).start();
        new Thread(No26_removeDuplicates::B).start();
    }

    public static void A() {
        synchronized (Object.class) {
            System.out.println("A start");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("A end");
        }
    }

    public static void B() {
        synchronized (Object.class) {
            System.out.println("B start");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("B end");
        }
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...