zoukankan      html  css  js  c++  java
  • Java高并发和多线程系列

    1. 什么是线程? 线程和进程的区别

    在了解线程的概念前,我们应该先知道什么是进程?

    进程是操作系统的基本概念之一, 它是正在执行的程序实例。

    * 下面的一些进程的基本概念你可以了解下 

    --------------------------------------------------------------------

    操作系统逻辑上将一个进程分为以下几部分(段):

    # 文本

      程序的指令

    # 数据

      程序使用的静态变量

    # 堆

      程序可从该区域动态分配额外内存

    # 栈

      随函数调用和返回而增减的一片内存, 用于为局部变量和函数调用链接信息分配存储空间

    --------------------------------------------------------------------


    那么,什么是线程呢?

    线程是程序执行的最小单位。

    我们可以把线程看做是轻量级的进程。

    使用多线程而不是多进程去进行并发程序的设计,是因为线程间的切换和调度成本要远远小于进程。

    2. 线程的生命周期和各个状态

    NEW(新生)

    线程刚被新建好之后,进入 NEW(新生)状态

    这个时候线程还没开始执行

    RUNNABLE(运行)

    当线程的start()方法调用时, 才表示线程开始执行。

    BLOCKED(阻塞)

    如果线程在执行的过程中遇到了synchronized同步块, 就会进入

    BLOCKED(阻塞)状态, 这时线程会暂停执行,知道获得请求的锁。

    WAITING / TIMED_WAITING

    这两个状态都是线程进入等待状态

    区别是: WAITING(无时间限制) / TIMED_WAITING(有时间限制)

    wait()方法会让线程进入等待队列

    notify()方法会在等待队列中将线程唤醒

    join()方法让线程进入等待队列,等目标线程终止

    TERMINATED(终止)

    当线程执行完毕后,则进入TERMINATED(终止)状态

  • 相关阅读:
    完全用GNU/Linux工作,摈弃Windows你我共勉
    vi编辑器的学习使用(七)
    vi编辑器的学习使用(三)
    Debian 的安装方法
    vi编辑器的学习使用(九)
    vi编辑器的学习使用(六)
    vi编辑器的学习使用(五)
    非常好的javascript:add event/ remove event
    【leetcode】NQueens
    Delphi VCL 的消息处理机制(1)
  • 原文地址:https://www.cnblogs.com/davidgu/p/8853970.html
Copyright © 2011-2022 走看看