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() {
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 有这样一个场景,一个银行账户有一个活期储蓄余额和定期储蓄余额。银行类如下: 问题1:当一个线程给活期增加余额时候(...
    d3f59bfc7013阅读 3,465评论 0 1
  • synchronized在java中的作用是线程同步,其目的是保障同步区代码的正确执行,同一时间仅有一个线程进入同...
    劲火星空阅读 3,909评论 0 1
  • synchronized是一种同步锁。他修饰的对象有一下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作...
    姑姑嘎嘎阅读 4,055评论 0 0
  • synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码...
    明教de教主阅读 3,897评论 0 2
  • synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码...
    境里婆娑阅读 2,939评论 0 0

友情链接更多精彩内容