# Zookeeper分布式锁场景

### Zookeeper分布式锁场景

### 线程进程资源竞争

当有一个线程或进程在对资源进行操作时，其他线程或进程都不可以对这个资\
原进行操作，直到该线程或进程完成操作，其他线程或进程才能对该资源进\
行操作，而其他线程或进程又处于等待状态。

![](/files/-LfnTMHmzm1rOh1Y87O1)

## 线程同步的方式和机制

临界区、互斥量、事件、信号量四种方式

临界区（Critical Section）、互斥量（Mutex）、信号量（Semaphore）、事件（Event）的区别

1、临界区：通过对多线程的串行化来访问公共资源或一段代码，速度快，适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问，如果有多个线程试图访问公共资源，那么在有一个线程进入后，其他试图访问公共资源的线程将被挂起，并一直等到进入临界区的线程离开，临界区在被释放后，其他线程才可以抢占。

> 通过对多线程的串行化来访问**公共资源或一段代码**
>
> `synchronized` 修饰的java方法\
> 仅用于线程同步

2、互斥量：采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限，因为互斥对象只有一个，所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享，还能实现不同应用程序的公共资源安全共享.

> 只有拥有互斥对象的线程才有访问公共资源的权限，因为互斥对象只有一个
>
> * `synchronized` -  修饰的代码块
> * `java.util.concurrent.locks.Lock` - 分布式锁的主要实现机制

3、信号量：它允许多个线程在同一时刻访问同一资源，但是需要限制在同一时刻访问此资源的最大线程数目

> 解决执行顺序`CountDownLatch`,`CyclicBarrier`和`Semaphore`的问题

4、事 件： 通过通知操作的方式来保持线程的同步，还可以方便实现对多个线程的优先级比较的操作

### 分布式锁实现的技术

基于数据实现分布式锁

* 性能较差，容易出现单点故障
* 锁没有失效事件,容易死锁。
* 非阻塞式
* 不可重入

基于缓存实现分布式锁

* 锁没有失效事件,容易死锁
* 非阻塞式
* 不可重入

基于Zookeeper实现分布式锁

* 实现相对简单
* 可靠性高
* 性能较好

### Zookeeper实战分布式锁

**分布式锁解决思路**&#x20;

分布式锁使用zk，在zk上创建一个临时节点（有效期），使用临时节点作为锁，因为节点不允许重复。

如果能创建节点成功，生成订单号，如果创建节点失败，等待。临时节点zk关闭，释放锁，其他节点就可以重新生成订单号。

**场景描述**

在线程高并发场景下,生成唯一的订单编号\
如:2018-07-14-20-52-31-01\
年 月 日 时 分 秒 序号

![](/files/-LfnTMHpftRxJ-uAUGzp)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xiaoxiami.gitbook.io/zookeeper/zookeeperfen-bu-shi-suo-chang-jing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
