03 Java Synchronization同步

Java编程语言为线程之间的通信提供了多种机制。
这些方法中最基本的一种方法是synchronization,它是使用monitors 监视器来实现的。
Java中的每个对象都与一个监视器相关联,一个线程可以锁定或解锁该监视器。
一次只有一个线程可以保持监视器上的锁。
试图锁定该监视器的任何其他线程将被阻止,直到它们能够获得该监视器的锁定。
线程 可以多次锁定特定的监视器;每次解锁都会反转一个锁定操作的效果。

synchronized语句计算对对象的引用。
然后,它尝试在该对象的监视器上执行锁定操作,在锁定操作成功完成之前不会继续进行。
在执行了锁定动作后,将执行 synchronized 语句的主体。
如果主体的执行已完成,无论是正常的或突然,都将在同一监视器上自动执行解锁操作。

synchronized 方法在被调用时自动执行锁定操作;在锁定操作成功完成之前,不会执行其主体。
如果该方法是一个实例方法,那么它将锁定与被调用它的实例关联的监视器(即,在执行方法主体期间将被称为 this 的对象)。
如果方法是static,则它将锁定与表示定义方法的类的Class对象关联的监视器。
如果方法主体的执行已经完成,无论是正常完成或是突然完成,都在同一监视器上自动执行解锁操作。

Java编程语言既不阻止也不需要检测死锁条件。
线程(直接或间接地)在多个对象上保持锁定的程序应该使用传统的避免死锁的技术,并在必要时创建不发生死锁的更高级别的锁定原语。

其他机制,如易失性变量的读写和 java.util.concurrent 包中类的使用,提供了不同的同步方法。

java.util.concurrent

Interfaces

Classes

Enums

Exceptions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值