锁代码块和锁方法有啥区别啊?
一、锁代码块和锁方法的区别
锁代码块和锁方法的标准的说法应该是同步代码块和同步方法。区别是:
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
更多>>
什么是网络管理?
一、什么是网络管理网络管理是一种保护计算机网络资源的系统,该系统通过应用、设备和系统对资源进行管理和监督。网络管理对于数据管理流程十分...详情>>
2023-10-11 22:47:57
软件工程的方法有哪些?
一、软件工程的方法1. 结构化方法结构化方法是应用较为广泛的一种开发方法。按照信息系统生命周期,应用结构化系统开发方法,把整个系统的开发...详情>>
2023-10-11 17:52:01
cad中d开头的命令有哪些?
一、cad中d开头的命令1. DIMSTYLE(标注样式管理器)标注样式管理器可以说用得非常频繁了,用户根据实际的标准进行设置标注样式,可进行新建、...详情>>
2023-10-11 17:13:39
Apache Spark 有哪些优势?
一、Apache Spark的优势1、速度您可以使用比 Hadoop MapReduce 快 100 倍的速度运行工作负载。Spark 采用最先进的有向无环图调度器、查询优化器...详情>>
2023-10-11 15:12:17