上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页
摘要: 组成: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 代理模式: 为其他对象提供一种代理以控制对这个对象的访 阅读全文
posted @ 2018-01-23 20:54 _sanjun 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 4.2 Java虚拟机对锁优化所做的努力 介绍几种JDK内部的“锁”优化策略。 4.2.1 锁偏向 锁偏向是一种针对加锁操作的优化手段。它的核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样就节省了大量有关锁申请的操作,从而 提高了程序性能。因 阅读全文
posted @ 2018-01-23 00:14 _sanjun 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 4.1 有助于提高“锁”性能的几点建议 “锁”的竞争必然会导致程序的整体性能下降。 4.1.1 减小锁持有时间 在锁竞争过程中,单个线程对锁的持有时间与系统性能有着直接的关系。 程序开发也是类似的,应该尽可能地减少对某个锁的占有时间,以减少线程间互斥的可能。以下面的代码段为例: syncMethod 阅读全文
posted @ 2018-01-22 22:11 _sanjun 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 3.3 不要重复发明轮子:JDK的并发容器 3.3.1 超好用的工具类:并发集合简介 JDK提供的这些容器大部分在java.util.concurrent包中。 ConcurrentHashMap:这是一个高效的并发HashMap。可以理解为一个线程安全的HashMap。 CopyOnWriteAr 阅读全文
posted @ 2018-01-22 17:40 _sanjun 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 3.2.5 自定义线程创建:ThreadFactory 线程池的主要作用是为了线程复用,也就是避免了线程的频繁创建。 ThreadFactory是一个接口,它只有一个方法,用来创建线程: 当线程池需要新建线程时,就会调用这个方法。 下面的案例使用自定义的ThreadFactory,一方面记录了线程的 阅读全文
posted @ 2018-01-21 00:10 _sanjun 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 3.2 线程复用:线程池 一种最为简单的线程创建和回收的方法类似如下代码: 在run方法结束后,自动回收。 在真实的生产环境中,系统由于真实环境的需要,可能会开启很多线程来支撑其应用。而当线程数量过大时,反而会耗尽CPU和内存资源。 3.2.1 什么是线程池 为了避免系统频繁地创建和销毁线程,我们可 阅读全文
posted @ 2018-01-20 20:55 _sanjun 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 3.1.2 重入锁的好搭档:Condition条件 它和wait()和notify()方法的作用是大致相同的。但是wait()和notify()方法是和synchronized关键字合作使用的,而Condition是与重入锁相关联的。通过Lock接口的Condition newCondition() 阅读全文
posted @ 2018-01-20 14:11 _sanjun 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 3.1 多线程的团队协作:同步控制 3.1.1 synchronized的功能扩展:重入锁 重入锁可以完全替代synchronized关键字。 重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。下面是一段最简单的重入锁使用案例: public cla 阅读全文
posted @ 2018-01-20 10:04 _sanjun 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 2.8 程序中的幽灵:隐蔽的错误 2.8.1 无提示的错误案例 以求两个整数的平均值为例。请看下面代码: 输出如下: 这是一个典型的溢出问题!显然,v1 + v2的结果已经导致了int的溢出。 2.8.2 并发下的ArrayList ArrayList是一个线程不安全的容器。如果在多线程中使用Arr 阅读全文
posted @ 2018-01-19 23:33 _sanjun 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 2.3 volatile 与 Java 内存模型(JMM) volatile对于保证操作的原子性是由非常大的帮助的(可见性)。但是需要注意的是,volatile并不能代替锁,它也无法保证一些复合操作的原子性。比如下面的例子,通过volatile是无法保证i++的原子性操 作的: 在对count累加前 阅读全文
posted @ 2018-01-19 21:59 _sanjun 阅读(242) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 14 下一页