锁代码块和锁方法有啥区别啊?
一、锁代码块和锁方法的区别
锁代码块和锁方法的标准的说法应该是同步代码块和同步方法。区别是:
1.写法
同步代码块是写在方法中的
同步方法是通过关键字标识方法
// 同步代码块
public void test2() {
synchronized (锁) {
// 代码
}
}
// 同步方法
public synchronized void test1() {
// 代码
}
2. 锁的范围
同步代码块的范围是它大括号所包含的所有代码
同步方法的范围是方法中的所有代码
3. 锁的类型
同步代码块使用的锁是可以自定义的,可以是任意的对应或者类(类本质也是传入的一个对象)
同步方法使用的锁是固定的,或者说是规定好的。
public class Test {
public static void main(String[] args){
Test t = new Test();
t.test3();
}
// 使用当前类对象作为锁,在本例中就是使用 Test.class 作为锁
public static synchronized void test1() {
}
// 等同于
public void test2() {
synchronized (Test.class) {
}
}
// 使用 this 作为锁,在本例中就是使用对象 t 作为锁
public synchronized void test3() {
}
// 等同于
public void test4() {
synchronized (this) {
}
}
}
延伸阅读:
二、Synchronized(this)锁代码块
用关键字synchronized修饰方法在有些情况下是有弊端的,若是执行该方法所需的时间比较长,线程1执行该方法的时候,线程2就必须等待。这种情况下就可以使用synchronized同步该方法中会引起线程安全的那部分代码,其余不会引起线程安全的就不需要同步,这部分代码就可以多线程并发执行,减少时间提高效率。
举例:多线程执行同一个方法时,同步方法和同步代码块花费时间的比较
synchronized修饰方法(同步方法)
synchronized修饰longTimeTask方法,其中花费时间比较长的且与线程安全无关的是37-39行代码,会引起线程安全问题的是42-46。
以上就是关于锁代码块和锁方法有啥区别的内容希望对大家有帮助。

猜你喜欢LIKE
相关推荐HOT
更多>>
自助建站和传统语言开发的网站有哪些区别?
一、自助建站和传统语言开发的网站的区别自助建站和传统语言开发的网站有以下区别:1、技术要求不同传统语言开发的网站需要有一定的编程技术和...详情>>
2023-10-14 23:49:18
选择运算和投影运算有哪些区别?
一、选择运算和投影运算的区别在关系型数据库管理系统 Access 中,选择运算(Selection)和投影运算(Projection)是两种常用的操作,它们的区...详情>>
2023-10-14 21:46:11
l1正则和l2正则的区别?
一、l1正则和l2正则的区别L1减少的是一个常量,L2减少的是权重的固定比例L1使权重稀疏,L2使权重平滑。L1减少的是一个常量,L2减少的是权重的固...详情>>
2023-10-14 19:42:58
为什么苹果选用Pascal做为Lisa和早期Mac的操作系统的编程语言?
一、苹果选用Pascal做为Lisa和早期Mac的操作系统的编程语言的原因苹果公司选用Pascal做为Lisa和早期Mac的操作系统的编程语言,主要是因为Pascal...详情>>
2023-10-14 16:52:31热门推荐
自助建站和传统语言开发的网站有哪些区别?
沸NTLEA和Locale Emulator有哪些区别?
热iwatch3gps和蜂窝区别?
热选择运算和投影运算有哪些区别?
新jsp和servlet的区别和联系?
面向对象编程,面向函数式编程,面向过程编程有什么区别?
mos管和场效应管区别?
l1正则和l2正则的区别?
java中方法嵌套和方法链区别?
锁代码块和锁方法有啥区别啊?
内存泄漏和内存溢出有啥区别?
为什么苹果选用Pascal做为Lisa和早期Mac的操作系统的编程语言?
为什么说Ruby继承了Lisp?
golang中interface为什么不算泛型?
技术干货






