//ExtLock基于zk实现分布式锁 public void getLock() throws InterruptedException;
//释放锁 public void unLock();
}
package com.itheima.jishutie;
import org.I0Itec.zkclient.ZkClient;
//将重复代码抽象到子类中(模板方法设计模式) public abstract class ZookeeperAbstractLock implements ExtLock { public static final String CONNECTION="192.168.12.131:2181"; protected ZkClient zkClient = new ZkClient(CONNECTION); public String lockPath="/lockPath";
private OrderNumGenerator orderNumGenerator = new OrderNumGenerator(); // 定义成全局的 private ExtLock lock = new ZookeeperDistrbuteLock();
public void run() {
getNumber();
}
public synchronized void getNumber() { // 加锁 保证线程安全问题 让一个线程操作 try { lock.getLock();
String number = orderNumGenerator.getNumber();
System.out.println("順序输出:" + number);
} catch (Exception e) {
} finally { lock.unLock();
}
}
public static void main(String[] args) { // OrderService orderService = new OrderService(); for (int i = 0; i < 100; i++) { // 开启100个线程 //模拟分布式锁的场景 new Thread(new OrderService()).start();
}
}