共计 708 个字符,预计需要花费 2 分钟才能阅读完成。
多线程机制大大提高了零碎整体的并发能力以及性能, 针对于线程的平安问题咱们能够应用锁来解决.
什么是锁
当多个线程简直同时批改一个共享数据的时候,须要进行同步控制,线程同步可能保障多个线程平安的拜访竞争资源 (全局内容),最简略的同步机制就是应用互斥锁。
某个线程要更改共享数据时,先将其锁定,此时资源的状态为锁定状态,其余线程就能更改,直到该线程将资源状态改为非锁定状态,也就是开释资源,其余的线程能力再次锁定资源。互斥锁保障了每一次只有一个线程进入写入操作。从而保障了多线程下数据的安全性。
什么是 synchronized?
synchronized 是 Java 中的一个关键字,翻译成中文是同步的意思,次要解决的是多个线程之间拜访资源的同步性,能够保障被它润饰的办法或者代码块在任意时刻只能有一个线程执行。
synchronized 关键字的应用形式次要有 3 种:润饰实例办法润饰静态方法润饰代码块
乐观锁
概念
乐观锁与乐观锁是一种狭义上的概念,体现了对待线程同步的不同角度。在 Java 和数据库中都有此概念对应的理论利用。
乐观锁 / 乐观锁区别
乐观锁
对于同一个数据的并发操作,乐观锁认为本人在应用数据的时候肯定有别的线程来批改数据,因而在获取数据的时候会先加锁,确保数据不会被别的线程批改。Java 中,synchronized 关键字和 Lock 的实现类都是乐观锁。
乐观锁
而乐观锁认为本人在应用数据时不会有别的线程批改数据,所以不会增加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。
- 如果这个数据没有被更新,以后线程将本人批改的数据胜利写入。
- 如果数据曾经被其余线程更新,则依据不同的实现形式执行不同的操作(例如报错或者主动重试)。
正文完