线程锁:
主要用来给方法、代码块加锁。当某个方法或代码块使用锁是,同一个时刻至多仅有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同时只有一个线程在执行,其余线程必须等待当前线程执行完后才能执行该代码段。(比如 php 中的函数中的static变量)
进程锁:
为了控制同一操作系统中多个进程访问一个共享资源,因为程序的独立性,各个进程无法控制其他进程对资源的访问,但是可以通过本地系统的信号量控制。 (比如:通过本地的某个具体文件锁的读取)
分布式锁:
当多个进程不在同一个系统中时,使用分布式锁控制多个进程对程序的访问。
实现分布式锁必须依靠第三方存储介质来实现,比如使用redis缓存或者数据库存储某个id,如果该锁id存在,则将退出操作,如果锁id不存在,则将锁id写入并执行对数据的操作,操作完毕后再将锁删除。
注意:线程锁、进程锁、分布式锁的作用一致,但是作用范围不同,分布式锁>进程锁>线程锁。
参考:https://mp.weixin.qq.com/s/iVUmcoEhy3ObcrZdnHUmow