锁代码块和锁方法有啥区别啊?
一、锁代码块和锁方法的区别
锁代码块和锁方法的标准的说法应该是同步代码块和同步方法。区别是:
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。
以上就是关于锁代码块和锁方法有啥区别的内容希望对大家有帮助。

相关推荐HOT
更多>>
javaoa系统有哪些模块?
一、权限管理模块权限管理模块是Java OA系统的核心模块之一,也是整个系统的基础。该模块通过对系统用户进行身份验证、权限分配、访问控制等管...详情>>
2023-10-19 22:07:20
为什么Python里的True和False两个布尔值首字母要大写?
一、Python里的True和False两个布尔值首字母要大写的原因Python中的True和False是布尔类型的常量,它们的首字母需要大写,是为了表示它们是关键...详情>>
2023-10-19 17:09:29
物联网感知技术有哪些?
一、物联网感知技术物联网感知技术是指用于获取物理世界中的各种信息,并将其转换为数字信号的技术。物联网感知技术是物联网的基础,它使物联网...详情>>
2023-10-19 16:39:59
语雀如何管理项目需求?
一、语雀管理项目需求1. 产品和研发协同撰写需求文档文档一键分享给同事,项目组成员可随时查看、评论或协同编写,保证信息随时同步并及时获得...详情>>
2023-10-19 15:43:54