java面试题网

普通会员

257

帖子

9

回复

151

积分

楼主
发表于 2018-03-22 09:27:09 | 查看: 842| 回复: 2

(1)同步代码块:位置比较灵活,锁对象可以任意对象,但必须是同一对象。格式:

            synchronized(对象) { //任意对象都可以。这个对象就是锁。

                             需要被同步的代码;

            }

(2)同步函数:声明方法时加synchronized关键字,同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。

(3)在一个类中只有一个同步,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同的锁。所以同步代码块相对灵活一些。



普通会员

257

帖子

9

回复

151

积分
沙发
发表于 2018-11-01 17:12:16

同步方法和同步代码块的区别是什么?

同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。

而同步代码块则是在方法内部使用大括号使得一个代码块得到同步。同步块会有一个锁定的“对象”。同步代码块的同步范围更加准确。

普通会员

216

帖子

75

回复

160

积分
板凳
发表于 2019-04-30 15:58:12
同步代码块和同步方法有什么区别

相同点:

同步方法就是在方法前加关键字synchronized,然后被同步的方法一次只能有一个线程进入,其他线程等待。而同步代码块则是在方法内部使用大括号使得一个代码块得到同步。同步代码块会有一个同步的“目标”,使得同步块更加灵活一些(同步代码块可以通过“目标”决定需要锁定的对象)。

一般情况下,如果此“目标”为this,同步方法和代码块没有太大的区别。

区别:

同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。很明显,同步方法锁的范围比较大,而同步代码块范围要小点。一般同步的范围越大,性能就越差。所以一般需要加锁进行同步的时候,范围越小越好,这样性能更好。

您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018