java并发之内置锁

2024-10-13 00:37:36

1、java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized Block)

java并发之内置锁

2、同步代码块包括两部分:一个作为锁对象引用,一个作为由这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法的同步代码块,其中同步代码块的锁就是方法调用所在的对象,静态的synchronized方法一class对象作为锁。

java并发之内置锁

3、每个java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获得锁,并且在退出同步代码块时自动释放锁,而无论是通过正常的控制路劲退出,还是通过从沪枭诽纾代码块中抛出异常退出。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。

java并发之内置锁

4、java的内置锁相当于一种互斥体,这意味着最多只有一个线程持有这种锁。当线程A尝试获取一个由线程B持有的锁时,线程A必须等待或者阻塞,知道线程B释放这个锁。如果线程B永远不释放锁,那么A也将永远的等下去。

java并发之内置锁

5、由于坡庥汩赴每次只能有一个线程执行内置锁保护的代码块,因此,由这个锁保护的同步代码块会以原子方式执行,多个线程在执行该代码块是也不会相互干扰。并发环境中的原子性与事务应用程序中的原子性有着相同的含义(一组语句作为一个不可分割的单元被执行)。任何一个执行同步的线程,都不可能看待有其他线程正在执行同一个锁保护的同步代码块。

6、如下示例:

java并发之内置锁java并发之内置锁

7、上面的实例代码类时线程安全的,但是,这种方法却过于极端,因为多个客户端无法同时使用因数分解servlet,服务的响应性很低。这是一个性能问题,而不是线程安全问题。

java并发之内置锁
猜你喜欢