Java synchronized的使用

synchronized 是控制访问的情况下使用,说人话就是在多个线程在访问同一个对象所做的访问控制,大概说一下我了解的synchronized的使用和了解,有错误的描述,大家可以指出来,我及时修改
synchronized是内置锁
简单的使用,这是放在方法上的

public synchronized void test() {
}

这是放在对象上的

public Object object =new Object();
    public void test() {
        synchronized (object){
            
        }
    }

第一段代码属于隐式写法,它的显式写法如下:

public void test() {
        synchronized (this){
        }
    }

其实上面3段代码,都是对象锁,且效果基本一致;这些锁也可以所用于List,String等类型防止并发访问修改导致的问题

接下来讲讲在static作用下的

 public synchronized void test() {
    //这是属于对象锁
 }
 public synchronized static void test1() {
   //这是类锁,其实也是对象锁
 }

这2段代码都是对象锁,为什么说synchronized 是类锁呢,其实就是偷个懒,因为相当于静态方法和成员方法,我只是不知道该怎么描述;虽然这两个都是对象锁,但是这两个锁持有的实例却不一样,因为静态相当于在JDK中有且仅有的一个,但是成员变量却不一样,可能描述的不对,大家懂那个意思就行

分享一下单例写法
懒汉式,安全写法,也是双重检查写法,这个也是属于类锁

private static volatile Test instance = null;

    private static Test getInstance() {
        if (instance == null) {
            synchronized (Test.class) {
                if (null == instance) {
                    instance = new Test();
                }
            }
        }
        return instance;
    }
    private Test() {
    }

你可能感兴趣的:(Java synchronized的使用)