实战java高并发程序设计 1

重要概念

  1. 同步(synchronous)和异步(asynchronous)

    • 同步等待方法返回
    • 异步瞬间返回,继续下一次调用
  2. 并发(Concurrency)和并行(Parallelism)
    • 并发与并行外界表现一致
    • 单核心cpu无法并行,但可以处理并行事务
  3. 临界区
    • 公共资源或者共享数据
    • 多线程访问时,可能造成临界区数据破坏
  4. 阻塞(Blocking)和非阻塞(Non-Blocking)
    • 非阻塞允许多个线程同时进入临界区
  5. 死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)
    • 死锁 不能停止服务,静态问题。循环依赖
    • 活锁 动态锁,运行时资源征用
    • 饥饿 缺乏某些资源而始终无法执行

并发级别

  1. 阻塞
  2. 非阻塞
    1. 无障碍
    2. 无锁
    3. 无等待

Amdahl定律(阿姆达尔定律)

  加速比定义:

    加速比=优化前系统耗时/优化后系统耗时

Gustafson定律(古斯塔夫森)

时间: 2024-11-07 09:51:27

实战java高并发程序设计 1的相关文章

【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray

除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表示整数数组.long型数组和普通的对象数组. 这里以AtomicIntegerArray为例,展示原子数组的使用方式. AtomicIntegerArray本质上是对int[]类型的封装.使用Unsafe类通过CAS的方式控制int[]在多线程下的安全性.它提供了以下几个核心API: //获得数组第

【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference

[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根本是因为对象在修改过程中,丢失了状态信息.对象值本身与状态被画上了等号.因此,我们只要能够记录对象在修改过程中的状态值,就可以很好的解决对象被反复修改导致线程无法正确判断对象状态的问题. AtomicStampedReference正是这么做的.它内部不仅维护了对象值,还维护了一个时间戳(我这里把它

【实战Java高并发程序设计 5】让普通变量也享受原子操作

[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象引用:AtomicStampedReference [实战Java高并发程序设计 4]数组也能无锁:AtomicIntegerArray 有时候,由于初期考虑不周,或者后期的需求变化,一些普通变量可能也会有线程安全的需求.如果改动不大,我们可以简单地修改程序中每一个使用或者读取这个变量的地方.但显然

【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现

[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象引用:AtomicStampedReference [实战Java高并发程序设计 4]数组也能无锁:AtomicIntegerArray [实战Java高并发程序设计 5]让普通变量也享受原子操作 [实战Java高并发程序设计6]挑战无锁算法:无锁的Vector实现 在对线程池的介绍中,提到了一个非

我的《实战java高并发程序设计》纸质书上市了

在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要. <实战Java高并发程序设计>主要介绍基于Java的并行程序设计基础.思路.方法和实战.首先,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法.第二,进一步详细介绍JDK中对并行程序的强大支持,帮助读者快速.稳健地进行并行程序开发.第三,详细讨论有关"锁"的优化和提高并行程序性能级别的方法和思路.第四,介绍并行的基本设计模式及Java8对并行程序的支

【实战Java高并发程序设计 1】Java中的指针:Unsafe类

是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我们更进一步看一下它把! public final boolean compareAndSet(int expect, int update){ returnunsafe.compareAndSwapInt(this, valueOffset, expect, update); } 在这里,我们看到一个特殊的变

一图搞定【实战Java高并发程序设计】

来了解下java并发的技术点吧.

JAVA高并发程序设计学习-JDK并发包:同步控制一

JDK内部提供了大量的API和框架,这里主要介绍三部分 多线程同步控制方法 线程池,提高线程调度的性能 JDK的并发容器 重入锁:java.util.concurrent.locks.ReenterLock 在代码中,类ReenterLock实现了Runnable,其中有static的变量i,在run()方法中会对i进行自增操作. 自增操作的步骤为:get-set,先获取值再增加值. 如果在这里不进行控制的话,会导致get的值不是最新set的值. 因此,在自增的时候使用锁进行控制,保证get-s

Java高并发程序设计

一.并行世界 摩尔定律的失效,2004年秋季,Intel宣布彻底取消4GHz计划,CPU向多核心的发展,顶级计算机科学家唐纳德丶尔文丶克努斯评价:在我看来,这种现象(并发)或多或少是由于硬件设计者已经无计可施导致的,他们将摩尔定律失效的责任推脱给软件开发者. 1.几个概念 同步和异步: 并发与并行:都表示多个任务同时执行,但并发偏重于多个任务交替执行. 临界区:即共享的数据 阻塞和非阻塞: 死锁.饥饿和活锁:死锁为互不让行,饥饿为一直拿不到资源,活锁为一直撞到 2.并发级别   由于临界区的存在