摘要: 现在我们要对商店商品进行折扣服务.每个折扣代码对应不同的折扣率,使用一个枚举变量Discount.Code来实现这一想法,具体代码如下所示. 以枚举类型定义的折扣代码 /** * 折扣服务api * * @author Darcy * Created by Administrator on 2017/3/17. */ public class Discount... 阅读全文
posted @ 2017-03-20 17:49 Darcy_wang 阅读(4766) 评论(5) 推荐(0) 编辑
摘要: * 实现异步API public double getPrice(String product) { return calculatePrice(product); } /** * 同步计算商品价格的方法 * * @param product 商品名称 * @return 价格 */ private 阅读全文
posted @ 2017-03-20 17:45 Darcy_wang 阅读(7298) 评论(2) 推荐(0) 编辑
摘要: CompletableFuture是Java8新增的一个超大型工具类,为什么说她大呢?因为一方面它实现了Future接口,更重要的是,它实现了CompletionStage接口.这个接口也是Java8新增加的,而CompletionStage拥有多达约40种方法, * 完成了通知我 * 异步执行任务 通过CompletableFuture提供进一步封装,我们很容易实现Futur... 阅读全文
posted @ 2017-03-20 17:41 Darcy_wang 阅读(952) 评论(0) 推荐(0) 编辑
摘要: 更快的原子类:LongAdder 大家对AtomicInteger的基本实现机制应该比较了解,它们是在一个死循环内,不断尝试修改目标值,知道修改成功,如果竞争不激烈,那么修改成功的概率就很高,否则,修改失败的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响 那么竞 阅读全文
posted @ 2017-03-20 17:39 Darcy_wang 阅读(10760) 评论(1) 推荐(1) 编辑
摘要: StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读锁会完全阻塞写锁,它使用的依然是悲观的锁策略.如果有大量的读线程,他也有可能引起写线程的饥饿 而Stamped 阅读全文
posted @ 2017-03-20 17:37 Darcy_wang 阅读(11170) 评论(0) 推荐(3) 编辑
摘要: LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = LocalDate.of(2017, 3, 20); int year = date.getYear(); 阅读全文
posted @ 2017-03-20 17:24 Darcy_wang 阅读(2385) 评论(0) 推荐(0) 编辑
摘要: 1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。 阅读全文
posted @ 2016-12-22 18:14 Darcy_wang 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 为每一个线程分配一个独立的对象对系统性能也许是有帮助的,当然了,这也不一定,这完全取决于共享对象的内部逻辑,如果共享对象对于竞争的处理容易引起性能损失,我们还是考虑使用ThreadLocal为每一个线程分配单独的对象.一个经典的案例就是在多线程下产生随机数: public class RandomD 阅读全文
posted @ 2016-12-22 18:12 Darcy_wang 阅读(252) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal的set方法和get方法,从set方法开始: public void set(T value) { Thread t = Thread.currentThread();//获取当前线程 ThreadLocalMap map = getMap(t);//获取线程的局部变量 if 阅读全文
posted @ 2016-12-22 18:10 Darcy_wang 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 从ThreadLocal的名字上可以看到,这是一个线程局部变量,也就是说,只有当前线程可以访问,既然是只有当前线程可以访问的数据,自然是线程安全的. public class ThreadLocalDemo { private static ThreadLocal<SimpleDateFormat> 阅读全文
posted @ 2016-12-22 18:05 Darcy_wang 阅读(210) 评论(0) 推荐(0) 编辑