Java并发编程学习——使用等待通知机制优化循环等待 发表于 2019-08-09 | 分类于 Java并发编程 | | 热度: ℃ 字数统计: 1.1k | 阅读时长 ≈ 3 什么是等待通知机制 在前面提到的破坏占用且等待条件的时候使用了死循环来获取资源,当apply()操作历时非常长或者并发量很大的时候,这个死循环是非常占cpu资源的,所以这种场景下可以使用等待通知机制来优化循环等待。 什么是等待通知机制?所谓等待就是当线程获取锁进入临界区想要获取相应资源而条件不 ... 阅读全文 »
Java并发编程学习——如何解决死锁 发表于 2019-08-08 | 分类于 Java并发编程 | | 热度: ℃ 字数统计: 1.8k | 阅读时长 ≈ 6 现实世界 前面我们使用Account.class来作为转账的锁,即当发生一个转账操作的时候,所有的用户操作都会被阻塞,这效率简直太低下。 现实世界里,账户转账操作是支持并发的,而且绝对是真正的并行,银行所有的窗口都可以做转账操作。只要我们能仿照现实世界做转账操作,串行的问题就解决了。 我们 ... 阅读全文 »
Java并发编程学习——互斥锁 发表于 2019-08-08 | 分类于 Java并发编程 | | 热度: ℃ 字数统计: 2.4k | 阅读时长 ≈ 9 如何解决原子性问题 原子性问题的源头就是线程切换,而我们禁用线程切换就能解决,而操作系统进行线程切换是依赖于CPU中断的,所以我们禁用CPU中断就能禁用线程切换。 在早期单核CPU的情况下,统一时刻只有一个线程执行(多线程是利用时间片切换),所以禁用了线程切换就导致了获得CPU使用权的线程可以 ... 阅读全文 »
Java并发编程学习——Java如何解决可见性和有序性问题 发表于 2019-08-07 | 分类于 Java并发编程 | | 热度: ℃ 字数统计: 1.8k | 阅读时长 ≈ 6 什么是Java内存模型 导致可见性的原因是缓存,导致有序性的原因是编译优化,那么解决可见性和有序性的最直接的方法就是禁用缓存和编译优化,但是如果禁用那么就会导致程序的性能下降。 所以合理的方案就是按需禁用缓存和编译优化,而何时禁用这件事情是程序员决定的,这时候就应该请出主角Java内存模型了。 ... 阅读全文 »
Java并发编程学习——可见性,原子性,有序性问题 发表于 2019-08-06 | 分类于 Java并发编程 | | 热度: ℃ 字数统计: 1.8k | 阅读时长 ≈ 6 并发程序幕后的故事 此系列文章为极客时间java并发编程课程的学习笔记。 计算机中由于CPU,内存,I/O设备三者硬件速度之间的差异,而面对三者的差异,计算机体系结构,操作系统,编译程序都为之做出了自己的贡献。 比如CPU增加了缓存机制,操作系统增加了进程,线程,分时复用CPU的理念,编译 ... 阅读全文 »
设计模式——解释器模式 发表于 2019-08-06 | 分类于 Java设计模式 | | 热度: ℃ 字数统计: 1.1k | 阅读时长 ≈ 4 什么是解释器模式 原文链接解释器模式 解释器模式的定义是一种按照规定语法进行解析的方案,在现在项目中使用的比较少,其定义如下: Given a language, define a representation for its grammar along with an interpret ... 阅读全文 »
设计模式——中介者模式 发表于 2019-08-05 | 分类于 Java设计模式 | | 热度: ℃ 字数统计: 922 | 阅读时长 ≈ 4 什么是中介者模式 中介者模式是一种行为模式,其中最重要的角色就是中介者了,中介者的作用就是封装一系列对象的交互逻辑。比如在一个智能家居系统中有许多设备比如TV,屏幕,摄像头,报警器等等的启动,一般来说系统的启动需要这些设备的相互协调交互,如果这些全部暴露给Client,那么整体逻辑就会变得非常的复 ... 阅读全文 »
设计模式——状态模式 发表于 2019-08-05 | 分类于 Java设计模式 | | 热度: ℃ 字数统计: 670 | 阅读时长 ≈ 3 什么是状态模式 一个事物在发展过程中都会产生不同的状态,比如人在成长过程中会有小孩,成人,老人等状态。但是这个状态是依赖聚合于对象本身的,因为状态是随着对象的行为而发生变化的,状态本身就是对象的一部分。 UML图 代码示例123456789101112131415161718192021222 ... 阅读全文 »
设计模式——备忘录模式 发表于 2019-08-04 | 分类于 Java设计模式 | | 热度: ℃ 字数统计: 408 | 阅读时长 ≈ 1 什么是备忘录模式 备忘录是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象外部保存状态。而状态保存的地方就是备忘录对象,并且再创建一个备忘录的管理类来管理一系列的状态,在用户操作的时候,用户不与备忘录直接耦合而与备忘录的管理类相耦合。相应的我们就可以做一些操作比如回滚,撤销等。 备忘录的 ... 阅读全文 »
设计模式——Command模式 发表于 2019-08-04 | 分类于 Java设计模式 | | 热度: ℃ 字数统计: 585 | 阅读时长 ≈ 2 什么是Command模式 所谓命令模式,必然存在三个角色——命令发起者、命令、命令接收者。即命令这个角色使发起者和接收者实现了解耦。试想一下,如果没有中间层命令,那么命令发起者必须聚合接收者,如果有了命令,那么发起者和接受者则通过命令来实现联系。 Command的UML图 Command是一个 ... 阅读全文 »