摘要: Future模式是多线程开发中常用常见的一种设计模式,它的核心思想是异步调用。在调用一个函数方法时候,如果函数执行很慢,我们就要进行等待,但这时我们可能不着急要结果,因此我们可以让被调者立即返回,让它在后台慢慢处理这个请求,对于调用者来说可以先处理一些其他事物,在真正需要数据的场合再去尝试获得需要的 阅读全文
posted @ 2019-08-11 16:10 扁豆一号 阅读(1477) 评论(0) 推荐(0) 编辑
摘要: 生产者-消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好的解决方案。这个模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间通过共享内存缓存区进行通信,这样就避免了生产者和消费者直接通 阅读全文
posted @ 2019-08-10 17:57 扁豆一号 阅读(1276) 评论(0) 推荐(0) 编辑
摘要: 对于并发控制而言,锁是一种悲观策略,它总是假设每一次的临界区操作会产生冲突。如果有多个线程同时需要访问临界区资源,则宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。而无锁是一种乐观策略,它会假设对资源的访问是没有冲突的,既然没有冲突就不会让线程等待,所有线程可以在不停顿的情况下持续执行。那遇到冲 阅读全文
posted @ 2019-08-09 23:36 扁豆一号 阅读(715) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal是一个线程的局部变量,也就是只有当前线程可以访问,是线程安全的。为每一个线程分配不同的对象,需要在应用层面保证ThreadLocal只起到简单的容器作用。 ThreadLocal类很简单,只有4个方法,它们是如下方法: void set(Object value)设置当前线程的 阅读全文
posted @ 2019-08-04 19:32 扁豆一号 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 定义一个操作中算法的骨架,将一些步骤放在子类实现,使得子类可以不改变一个算法结构即子类可以重定义该算法的某些特定步骤。 主要有两个角色: 1. 抽象模板 :是一个抽象类,并实现了一个具体模板方法,这个方法中会定义算法的骨架,其中一些步骤是引用抽象模板中的抽象方法,定义了算法的结构。 2. 具体模板 阅读全文
posted @ 2019-07-29 21:42 扁豆一号 阅读(149) 评论(0) 推荐(0) 编辑
摘要: JDK内部的“锁”优化策略 1. 锁偏向 锁偏向是针对加锁操作的优化手段,核心思想是:如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无须再做任何同步操作,这样就节省了大量有关锁申请的操作,从而提高了程序的性能。对几乎没有锁竞争的场合,偏向锁有很好的优化效果,对于锁竞争激烈的场合 阅读全文
posted @ 2019-07-28 18:07 扁豆一号 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 锁是最常见的同步方法之一,在高并发环境下,激烈的的锁竞争导致程序的性能下降,因此我们有必要讨论一些有关锁的性能问题,以及一些注意事项,比如避免死锁等。为了降低锁的竞争导致程序性能下降的话,可以用以下建议提高一下性能。 1. 减少锁持有时间 对于使用锁进行并发控制的应用程序而言,在锁竞争过程中,单个线 阅读全文
posted @ 2019-07-28 01:21 扁豆一号 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换,本模式使得算法可以独立于使用它的客户而变化。策略模式包括以下三种角色 策略(Strategy):策略是一个接口,该接口定义若干个算法标识,定义了若干个抽象方法。 具体策略(ConcreteStrategy):具体策略是实现策略接口的类,具 阅读全文
posted @ 2019-07-27 17:21 扁豆一号 阅读(481) 评论(0) 推荐(1) 编辑
摘要: JDK提供了一些高效的并发容器,下面介绍几个 ConcurrentHashMap:这是个高效的并发HashMap,可以理解为一个线程安全的HashMap。 CopyOnWriteArrayList:这是一个List,从名字看就知道它和ArrayList是一族的,在读多写少的场合,这个List的性能非 阅读全文
posted @ 2019-07-26 23:32 扁豆一号 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 提供一个创建一系列或相互依赖对象的接口,而无须指定他们具体的类。例如某些系统可能需要为用户提供一系列相关对象,但系统不希望用户直接使用new运算符实例化这些对象,而是应当由系统来控制这些对象的创建,否则用户不仅要清楚知道哪些类来创建对象,而且必须要清楚这些对象之间是如何相关的,使得用户代码和这些类型 阅读全文
posted @ 2019-07-24 20:59 扁豆一号 阅读(223) 评论(0) 推荐(0) 编辑