分析现在公司AtomicLong应用代码
最近刚换工作,项目组人员很忙,没人理我,无事闲看代码,看的第一段代码,发现很有意思,特记录下来;
/** * 获取流水号 * * @return * @throws SerialGenneratorException */protected String getSerial() throws SerialGenneratorException {synchronized (serial) {//serial是AtomicLong类型long sn = serial.getAndIncrement();if (sn + 1 > this.getLimit()) {//如果达到上限,则更新上限serial.set(this.allocate());//更新上限sn = serial.getAndIncrement();}// System.out.println(Thread.currentThread().getId()+"------"+sn);return seiralFormat(sn, length);}}
protected String getSerial() throws SerialGenneratorException {long sn = serial.getAndIncrement();if (sn + 1 > this.getLimit()) {// 如果达到上限,则更新上限synchronized (serial) {// serial是AtomicLong类型if (sn + 1 > this.getLimit()) {// 如果仍然达到上限,则更新上限serial.set(this.allocate());// 更新上限sn = serial.getAndIncrement();}}}return seiralFormat(sn, length);}