Home

Balking模式

适用的情况 不想让各个线程随意的访问实例, 保持实例的安全性, 但是又想在保证安全性同时提高响应速度. 实现的方式 如果实例处于非正确的状态, 不等待实例恢复正确, 而是直接返回. 判断检测实例的状态是不正确的. 通过return语句返回. 通过throw抛出一个异常中断执行. 相关的模式 如果线程需要等待正常的数据返回, 那么可以使用Guarded Suspension模式. 代码示例: 这是一个每隔一段时间自动保存数据的代码, 如果内容没有变化, 那么保存数据的线程可以直接return,无需等待数据的更改之后进行保存,然后再返回. packa...

Read more

Guarded Suspension 模式

适用的情况 相比于Single Thread Exception模式, 本模式加入了加入了守护条件来确保共享实例在被线程访问前是正确的状态 实现的方式 如果实例是不正确的, 那么就让前来访问的线程执行wait(), 在线程恢复到正确状态的时候, 由持有锁的进程来唤醒等待的线程继续访问被守护的实例. 线程恢复到正确状态的时候, 一定要执行notify()或notifyAll(),否则等待的线程将永远无法被唤醒! 相关的模式 Single Thread Exception模式的升级版, 增加了守护条件! 如果希望在实例是非正确的条件下, 来访问的线程不进行等待, 而是直接返回, 可以使用Balking模式 代码示例: package com.graphic.gu...

Read more

Single Thread Exception模式

适用的情况 当多个线程同时对可变实例进行操作的情况下, 实例就会变成非线程安全. 实现的方式 Synchronized关键字 synchronized使得指定的方法或者代码块只能串行执行, 也就是同一时间段, 只能有一个线程能对synchronized锁定的地方进行访问. synchronized 声明在方法上 默认锁定的对象是this synchronized 声明在代码块上 要指定要锁定的对象, 或者指定锁定的标志 多个线程同时访问synchonized加锁的方法或者代码段, 就会发生阻塞, 除了获得锁的线程, 其他线程会进入锁定对象的同步队列, 获得锁的线程完成相关任务后, 随机唤醒一个等待队列里面的线程, 获得锁. 以此类推. ...

Read more

Immutable模式

适用的情况 多个线程之间共享对象, 但是该对象的状态不会发生变化 用于提高Single Thread Exception模式的吞吐量 实现的方式 使对象的状态不可发生变化, 从而使其线程安全 private / final 关键字 相关的方式 对象的状态是可以改变的, 那么可以使用Single Thread Exception模式 读的次数要远远大于写的情况下, 可以进行读写分离, 使用Read-Write Lock模式 代码示例: package com.graphic.immutable; /** * @author youngxinler 19-5-19 下午8:26 * @version 0.1 * * 通过final关键字, 确保了只能在字段初...

Read more

面向对象的三大特性

1.封装 把客观事物封装成抽象的类, 类可以选择把自己的数据和方法只让可信任的类进行操作, 对不可信的进行隐藏. 类 = 数据 + 操作 通过封装, 对象对内部数据和操作进行不同程度的保护, 以防止其他操作意外地改变或错误地使用对象的数据和操作, 发生我们预想之外的非安全操作. 2.继承 通过继承可以使用现有类的所有数据和操作, 并且可以对现有类进行扩展. 被继承的类被称为: 父类 / 基类 / 超类 实现继承的类被称为: 子类 / 派生类 继承的实现方式有两种: 接口继承 接口继承仅使用接口的属性和方法, 但是子类必须提供其具体实现 类继承 类继承直接使用现有类的属性和方法而无需提供其具体实现 组合也是继承一种, 但有点不太容易...

Read more