zoukankan      html  css  js  c++  java
  • Java并发程序设计(一) 基础概念

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

    一、必须知道的几个概念

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

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

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

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

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

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

    并行:同时执行。

    三)临界区

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

     

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

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

     

    五)死锁、饥饿和活锁

    死锁:

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

    活锁:让路的例子。

     

    二、并发的级别

    一)阻塞

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

    二)非阻塞

    1)无障碍

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

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

    2)无锁

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

    3)无等待

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

    Simple is important!
  • 相关阅读:
    Codeforce 1335C
    CodeForces
    Codeforce:208A. Dubstep (字符串处理,正则表达式)
    HDU
    CodeForces -337A:Puzzles(水)
    Codeforce 318A
    从零教你打造免费、稳定、高效的图床
    docker-compose mysql和node连接认证mongo问题
    awardRotate转盘插件文字模糊问题和图片加载问题
    webpack从单页面到多页面
  • 原文地址:https://www.cnblogs.com/Shadowplay/p/7451043.html
Copyright © 2011-2022 走看看