Java高并发程序设计
任国明
我思故我在
展开
-
【高并发程序设计】函数式编程
1. 函数式接口 只有一个抽象方法的接口, 被称为函数式接口, 可以使用@FunctionalInterface注解来表明(如果符合函数式接口规范, 即便不使用该注解, 编译器依然会将其认定为函数式接口)。 这里需要注意的是, 函数式接口规范中, “只能有一个抽象方法”, 并不是说该接口中只能有一个方法。 Java8以后, 接口中存在实例方法; 同时, 任何被Object实现的方法, 均不会...原创 2019-11-18 23:17:00 · 327 阅读 · 0 评论 -
【高并发程序设计】并发模式
1.单例 单例模式基本算是最简单,但使用最广泛的模式了, 本文不对常用写法(懒汉、恶汉、枚举等)多加赘述, 只给出并发模式中实现简单性能最优的方案: public class Singleton { private Singleton() { System.out.println("Singleton is create"); } private s...原创 2019-11-12 01:31:03 · 220 阅读 · 0 评论 -
【高并发程序设计】无锁
并发控制中, 加锁的策略是悲观的, 其总是假设每次临界区操作都会产生冲突,因此每次都小心翼翼的。 当多个线程同时访问临界区资源时, 即便操作过程不会冲突, 程序也依然加锁让单一线程独享临界区资源, 同时挂起其他要访问的线程让它们等待, 这会牺牲系统性能。 而另一种无锁策略, 假设所有资源的访问都没有冲突, 因此也就不需要挂起等待, 所有线程均可以在不停顿的情况下执行。 多线程情况下的冲突是难免的,...原创 2019-11-06 01:59:26 · 238 阅读 · 0 评论 -
【高并发程序设计】 ThreadLocal
上一篇【高并发程序设计】锁优化 探讨的是通过控制资源访问来保证线程安全。这一篇我们换个思路,通过增加资源来保证线程的安全: TreadLocal。 1. 简单使用 顾名思义,ThreadLocal是线程的局部变量, 被线程独享, 那么自然而然其是线程安全的。首先我们看一个简单的例子, 看一下下面的代码。 public class ThreadLocalDemo { priva...原创 2019-11-02 16:53:34 · 189 阅读 · 0 评论 -
【高并发程序设计】锁优化
锁是最常用的同步方法之一。 在高并发环境下, 激烈的锁竞争会导致程序性能下降, 所以非常有必要讨论一下锁的性能问题以及相关的注意事项,如: 避免死锁、减小锁力度、锁分离等。 需要明确一点, 多核场景下, 使用多线程虽然可以提高系统性能, 但同时也会增加额外的系统开销, 如维护线程本身的元数据、线程调度、上下文切换等。 1. 提高锁性能的建议 锁竞争过程会导致系统性能下降, 为了将多线程的这种...原创 2019-10-30 14:39:55 · 348 阅读 · 0 评论