• Java并发程序设计(一) 基础概念


    Java并发程序设计(一) 基础概念

    一、必须知道的几个概念

    一)同步(Synchronous)和异步(Asynchronous)

    同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。

    异步:一旦开始,方法调用就立即返回,调用者就可以继续后续的操作。

    二)并发(Concurrency)和并行(Parallelism)

    共同点:都可以表示多个任务一起执行。

    并发:偏重于多个任务交替执行,多个任务之间还可能是串行的。

    并行:同时执行。

    三)临界区

    一种用来存储公共资源或者共享数据的区域,可以被多个线程使用。但每一次只能有一个线程使用它。

     

    四)阻塞(Blocking)和非阻塞(Non-Blocking)

    阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要
    这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如
    果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
    非阻塞允许多个线程同时进入临界区

     

    五)死锁、饥饿和活锁

    死锁:

    饥饿:指某一个或者多个线程因为某种原因无法获得所需要的资源,导致一直无法执行。

    活锁:让路的例子。

     

    二、并发的级别

    一)阻塞

    当一个线程进入临界区后,其他线程必须等待该线程释放资源。

    二)非阻塞

    1)无障碍

    无障碍是一种最弱的非阻塞调度
    自由出入临界区
    无竞争时,有限步内完成操作
    有竞争时,回滚数据

    可以通过一致性标记来实现。

    2)无锁

    是无障碍的
    保证有一个线程可以胜出

    3)无等待

    无锁的
    要求所有的线程都必须在有限步内完成
    无饥饿的

    Simple is important!
  • 相关阅读:
    高精度除法(到小数点后200位)
    CodeForces-Zuhair and Strings(思维+枚举)
    Codeforces-Salem and Sticks(枚举+思维)
    idata的各个类型
    C51串口的SCON寄存器及工作…
    XCode快捷键
    Objective-C 的 self 和 super 详解 (用简单程序说明问题)
    UITextFieldDelegate委托方法注释
    Objective-C 基础语法log打印那些事儿(一)
    fcntl详细说明
  • 原文地址:https://www.cnblogs.com/Shadowplay/p/7451043.html
Copyright © 2020-2023  润新知