美文网首页
java多线程相关概念

java多线程相关概念

作者: 瀟漾_Yang | 来源:发表于2017-08-03 09:50 被阅读0次

参考书籍
java高并发程序设计 作者 葛一鸣、郭超

1、基本概念

1.1、同步(Synchronous)和异步(Asynchronous)

同步和异步通常用来形容方法的一次调用。同步方法调用一旦开始,调用者必须等到方法调用返回以后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以进行后续的操作,异步方法通常回来另外一个线程中去执行。真个过程,不阻碍调用者的工作。如果异步调用需要返回结果,那么这个异步调用完成时,会通知调用者。

1.2、并发和并行

  • 都可以表示两个或者多个任务一起执行,但是侧重点不同。
  • 并发侧重于多个任务交替执行,而过个任务之间有可能还是串行的(单核多线程)。
  • 并行是真正意义的 "同时执行"。

1.3 、临界区

临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程去使用它,一旦临界区资源被占用,其他线程要想使用这个资源,必须等待。(一个办公室共享一个打印机)

1.4、阻塞和非阻塞

  • 阻塞和非阻塞通常用来形容多线程之间的相互影响。一个线程占用了临界区资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待。等待会导致线程挂起,造成阻塞。如果这个线程一直不释放资源,那么其他所有阻塞到这个临界区的线程都不能工作。
  • 非阻塞,强调没有一个线程可以妨碍其他线程执行。

1.5、死锁、饥饿、活锁

  • 都属于多线程的活跃性问题,如果出现这几个问题,那么线程已经不再活跃了,很难继续往下进行。
  • 饥饿是指某个或者多个线程因为种种原因无法获取所需要的资源,导致一直无法继续执行下去(线程优先级不够,导致高优先级的线程一直抢占资源,低优先级的线程无法工作),相比死锁,如果高优先级的执行完,还是能继续执行的。饥饿锁大多因为线程的优先级不一致造成低优先级的线程饥饿。
  • 活锁(两个人让路,尴尬的局面,都往左或者往右)资源不断在两个线程中跳动。
  • 产生死锁的四个必要条件:
    1.互斥条件:一个资源每次只能被一个进程使用。
    2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

2、并发级别

由于临界区的存在,多线程之间的并发必须受到控制,根据并发控制级别进行分类,大致上可以分为阻塞,无饥饿,无阻碍,无锁,无等待等。

2.1、阻塞

一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使用 synchronized,或者重入锁时,得到的就是阻塞线程。在执行代码时,都需要得到临界区的锁,如果得不到,线程就会被挂起等待,直到获取了进入临界资源的锁。

2.2、无饥饿

如果线程之间有优先级,那么线程调度的时候会倾向于优先级高的线程。对于非公平的锁来说,系统允许高优先级的线程插队,这样就造成低优先级线程饥饿。如果锁是公平的,则饥饿不会产生,要想获取资源,就需要排队。

3. JMM

java内存模型的关键技术都是围绕多线程的原子性、可见性和有序性来建立的。

相关文章

  • java多线程相关概念

    参考书籍java高并发程序设计 作者 葛一鸣、郭超 1、基本概念 1.1、同步(Synchronous)和异步(A...

  • Java 多线程 相关概念

    前言 本篇文章介绍一些多线程的相关的深入概念。理解后对于线程的安全性会有更深的理解。 先说一个格言,摘自Java核...

  • java并发编程(四)

    java多线程编程(四) 引言: 内存模型的基础----内存模型相关的基本概念 java内存模型中的顺序一致性--...

  • Android 高级面试-3:语言相关

    主要内容:Kotlin, Java, RxJava, 多线程/并发, 集合 1、Java 相关 1.1 缓存相关 ...

  • Java多线程初探

    本文列举了Java多线程相关的一些重要概念,作为后续系列文章索引。 Linux锁机制对比 spinlock: 自旋...

  • 我看谁还不懂多线程之间的通信+基础入门+实战教程+详细介绍+附源

    一、多线程之间的通信(Java版本) 1、多线程概念介绍 多线程概念 在我们的程序层面来说,多线程通常是在每个进程...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • Java篇-多线程

    多线程的概念已经写过很多了,java的多线程的概念和之前讲解的 OC 与 python多线程相同,这里就不再赘述了...

  • 多线程-相关概念

    一.同步(Synchronous)和异步(Asynchronous) 同步和异步通常用来形容一次方法调用,同步方法...

  • 多线程并发

    多线程并发必须掌握的相关概念:多线程:Thread、ThreasPool线程安全:volatile ,syncho...

网友评论

      本文标题:java多线程相关概念

      本文链接:https://www.haomeiwen.com/subject/ogwetxtx.html