java 线程由浅入深_由浅入深,Java 并发编程中的 Synchronized(一)

synchronized 作用

synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。

1.1 作用:

确保线程互斥的访问同步代,锁自动释放,多个线程操作同个代码块或函数必须排队获得锁,

保证共享变量的修改能够及时可见,获得锁的线程操作完毕后会将所数据刷新到共享内存区;

不解决重排序,但保证有序性。

1.2 用法:

修饰实例方法synchronized 关键词作用在方法的前面,用来锁定方法,其实默认锁定的是 this 对象。

f70c4c8a09a2ce24ecb80159a6e75274.png

修饰静态方法synchronized 还是修饰在方法上,不过修饰的是静态方法,等价于锁定的是 Class 对象。

a560282769ca9b3a6a5d4615491bdd93.png

修饰代码块用法是在函数体内部对于要修改的参数区间用 synchronized 来修饰,相比与锁定函数这个范围更小,可以指定锁定什么对象。

097ab7ab0d4806b6c1c02826ace2a7c7.png

总结:

synchronized 修饰的实例方法,多线程并发访问时,只能有一个线程进入,获得对象内置锁,其他线程阻塞等待,但在此期间线程仍然可以访问其他方法。

synchronized 修饰的静态方法,多线程并发访问时,只能有一个线程进入,获得类锁,其他线程阻塞等待,但在此期间线程仍然可以访问其他方法。

synchronized 修饰的代码块,多线程并发访问时,只能有一个线程进入,根据括号中的对象或者是类,获得相应的对象内置锁或者是类锁

每个类都有一个类锁,类的每个对象也有一个内置锁,它们是互不干扰的,也就是说一个线程可以同时获得类锁和该类实例化对象的内置锁,当线程访问非 synchronzied 修饰的方法时,并不需要获得锁,因此不会产生阻塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值