千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:上海千锋IT培训  >  技术干货  >  锁代码块和锁方法有啥区别啊?

锁代码块和锁方法有啥区别啊?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 18:23:40

一、锁代码块和锁方法的区别

锁代码块和锁方法的标准的说法应该是同步代码块和同步方法。区别是:

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

NTLEA和Locale Emulator有哪些区别?

2023-10-14

iwatch3gps和蜂窝区别?

2023-10-14

面向对象编程,面向函数式编程,面向过程编程有什么区别?

2023-10-14

最新文章NEW

C 语言中不同类型指针的大小是否完全相同,为什么?

2023-10-14

My.Computer.FileSystem和System.IO.File两个命名空间有哪些具体区别?

2023-10-14

线性分类器与非线性分类器的区别?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>