最近刚换工作,项目组人员很忙,没人理我,无事闲看代码,看的第一段代码,发现很有意思,特记录下来;
/**
* 获取流水号
*
* @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);
}
分享到:
相关推荐
本资料包含的源代码将深入探讨各种多线程设计模式,帮助开发者理解和应用这些模式。 一、线程基础 在Java中,可以通过实现`Runnable`接口或继承`Thread`类来创建线程。`Runnable`接口允许你将任务逻辑封装在一个类...
Java中的锁装箱是并发编程中的一个重要概念,它涉及到Java的并发工具类,特别是`java.util.concurrent.atomic`包中的...通过学习和分析这个源代码,开发者可以深入理解Java并发机制,提高在多线程环境下的编程技能。
《Java 7 Concurrency Cookbook》是...书中的每个章节都包含了实际的代码实现,可以帮助读者更好地理解和应用这些并发编程技术。无论你是初学者还是经验丰富的开发者,都可以从中受益,提升自己在并发编程领域的技能。
《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,随书代码提供了大量示例,帮助读者深入理解并掌握在实际开发中如何处理高并发场景下的问题。本书的核心知识点涵盖了Java并发编程的基础理论、核心...
《实战Java高并发程序设计...通过学习《实战Java高并发程序设计》并结合书中提供的代码示例,开发者可以掌握Java并发编程的核心技能,提升在多线程环境下的程序设计和调试能力,从而编写出更加高效、稳定的企业级应用。
在本课程中,你将学习到如何利用这些工具来提升应用程序的并发性能,同时理解其底层实现原理。 课程内容可能涵盖以下几个核心知识点: 1. **线程与并发基础**:首先,会介绍Java中的线程概念,包括线程的创建、...
随书附带的`concurrentbook`和`concurrentbook-jdk7`文件夹可能包含了与上述知识点对应的示例代码,通过阅读和运行这些代码,读者可以更好地理解和掌握Java并发编程的实际应用。在实践中不断探索和调试,将有助于...
通过分析和运行压缩包中的demo01等代码示例,开发者可以更直观地了解和学习这些概念和技术,并将其应用到自己的项目中。 在学习多线程时,理解线程的状态转换(新建、就绪、运行、阻塞、死亡)以及Java内存模型...
SonarQube 是一个广泛使用的静态代码分析工具,用于检查 Java 项目中的 bug、漏洞和坏味道。 SonarQube 提供了许多内置规则,用于检查 Java 代码的质量和安全性。下面是 SonarQube 中的一些基本内置规则: 1. 不要...
书中结合了理论与实际示例,提供了丰富的代码示例,使得读者能够通过实际操作来加深对并发编程的理解。 在Java并发编程领域,以下几个核心知识点是本书的重点: 1. **线程基础**:介绍Java中的Thread类,如何创建...
- **synchronized关键字**:可以作用于实例方法、静态方法以及代码块,保证同一时刻只有一个线程可以访问被同步的代码段。 - **ReentrantLock**:显式锁,提供比`synchronized`更强大的锁定机制,可以实现公平锁和非...
注解可以用于类型、方法、变量等,帮助进行代码的静态分析、编译时检查和运行时处理。例如,`@Override` 注解用来标记覆盖父类方法的方法,确保方法签名的正确性。 此外,Java 5还改进了类型推断(Type Inference)...
总的来说,这个资源包涵盖了Java并发编程的核心概念和技术,结合源码分析,学习者可以深入理解并发编程的原理,提升在实际项目中的应用能力。通过实践和调试源码,可以更好地掌握这些知识点,提高解决问题的能力。
本资源“concurrent:java并发编程的示例和原始代码分析”提供了深入理解和实践Java并发特性的宝贵材料。以下是对该资源中可能包含的知识点的详细说明: 1. **Java并发API**: 这个资源可能涵盖了Java的并发库,包括`...
- 模板方法模式:在代码复用和扩展中应用模板方法设计模式。 7. **框架应用** - Spring框架:了解依赖注入(DI)和控制反转(IoC)的概念,Spring Bean的生命周期管理。 - Spring MVC:掌握请求处理、视图解析、...
6. **原子变量**:分析AtomicInteger、AtomicLong和AtomicReference等原子变量类,以及它们如何实现无锁编程和高效并发操作。 7. **线程局部变量**:解释ThreadLocal类的工作原理,如何为每个线程提供独立的变量...
一种是使用`synchronized`关键字,它可以修饰方法或代码块,确保同一时间只有一个线程可以执行这部分代码。另一种方式是使用`Lock`接口及其实现,如`ReentrantLock`,提供了更细粒度的控制,允许更复杂的同步策略。 ...
#### 应用场景 这种单据编号的自动生成机制适用于各种需要按顺序生成唯一编号的场景,如订单编号、发票编号等。通过这种方式可以确保编号的唯一性和连续性,同时减少手动输入的错误。 #### 总结 通过上述分析,...
《JAVA并发编程实践》是...通过阅读《JAVA并发编程实践》,开发者能够理解并发编程的复杂性,学习到如何编写高效、健壮的并发代码,从而提升Java应用程序的性能和可靠性。这本书是Java并发编程领域不可或缺的参考书目。