高并发01_synchronized

关于synchronized关键字:
一句话说出Synchronized的作用
能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。
Synchronized的地位

  • Synchronized是Java的一个关键字
  • 是最基本的互斥同步的手段
  • 是并发编程中的元老级角色,是并发编程的必学内容

Synchronized的两种用法介绍
对象锁,包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)。
类锁,指synchronized修饰静态的方法或指定锁为Class对象。

第一个用法:对象锁
代码块锁
代码块形式:手动指定锁对象
锁对象的选取:若不特定锁对象,可以用this(当前对象)作为我们的锁。

例子如下:
在这里插入图片描述
Object的对象o放在堆里的,在堆上加了锁,当有线程访问这个对象,并想执行最后两个语句时,应该首先要拿到这个锁,然后进行访问,当第二个线程过来想拿锁的时候,应该是第一个线程执行完之后,把锁释放。锁的互斥。

在这里插入图片描述
方法锁形式

synchronized修饰普通方法(非静态方法),锁对象默认为this

在这里插入图片描述
这两种是一样的,锁定的是this对象,不是锁定整段代码。
synchronized锁定是一个对象,而不是代码块。

第二个用法:类锁
类锁的概念
概念:Java类可能有很多对象,但只有一个Class对象
本质:所谓的类锁,就是Class对象的锁
用法和效果:类锁在同一时刻只能被一个对象拥有
形式一:synchronized加在static方法上
形式二:synchronized(*.class)代码块

在这里插入图片描述
这里写synchronized(this)是不可以,静态的属性和方法是不需要new出对象进行访问的

在这里插入图片描述
是new了一个对象,多个线程一起访问这个对象
在这里插入图片描述
在这里插入图片描述
5个线程可能会出现线程重复的问题。这个时候是没有锁的,可能存在一个线程还没有访问完,另外一个线程又来了。
在这里插入图片描述
加上锁,上述问题就不存在了。加上synchronized之后,这个代码块是原子操作,不可分的。

发布了20 篇原创文章 · 获赞 3 · 访问量 1708

猜你喜欢

转载自blog.csdn.net/weixin_43493354/article/details/104864275