java中synchronized修饰一个类中的两个方法的理解

synchronized是Java中的关键字,是一种同步锁。

修饰方法时锁定的是调用该方法的对象,即如果一个对象中有两个方法同时被synchronized,则同一个对象,调用这两个方法时,只能同时执行一个。但它并不能使调用该方法的多个对象在执行顺序上互斥。

如以下代码,只能同时执行set方法或out方法

class Resoure{
    private String name;
    private int count = 1;
    //生产者调用
    public synchronized void set(String name){
        this.name = name+count;
        //编号自增
        count++;
        //打印生产了哪个产品
        System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);
    }
    //消费者调用
    public synchronized void out(){
        System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);
    }
}

翻看相关书籍,发现jvm在执行方法以前,如果发现该方法前面有对象的synchronized关键字,就现在该对象的ID上加锁,当其他线程执行同时执行这个方法时,会检测改对象ID上是否加锁,如果加锁时就等待锁释放。 
 

--------------------- 
原文:

https://blog.csdn.net/qa275267067/article/details/79804713

https://bjmike.iteye.com/blog/1346533

你可能感兴趣的:(JAVA)