文章目录

  • 1 进程与线程的概念
    • 1.1 进程和线程
    • 1.2 线程的状态
    • 1.3 wait和sleep
    • 1.4 并发与并行
    • 1.5 管程
    • 1.6 用户线程和守护线程

1 进程与线程的概念

1.1 进程和线程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

总结来说:

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是资源分配的最小单位

线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程时程序执行的最小单位

1.2 线程的状态

进入 java.lang.Thread 类,找到内部类 State ,代码如下

public enum State {/*** Thread state for a thread which has not yet started.*/NEW,/*** Thread state for a runnable thread.  A thread in the runnable* state is executing in the Java virtual machine but it may* be waiting for other resources from the operating system* such as processor.*/RUNNABLE,/*** Thread state for a thread blocked waiting for a monitor lock.* A thread in the blocked state is waiting for a monitor lock* to enter a synchronized block/method or* reenter a synchronized block/method after calling* {@link Object#wait() Object.wait}.*/BLOCKED,/*** Thread state for a waiting thread.* A thread is in the waiting state due to calling one of the* following methods:* <ul>*   <li>{@link Object#wait() Object.wait} with no timeout</li>*   <li>{@link #join() Thread.join} with no timeout</li>*   <li>{@link LockSupport#park() LockSupport.park}</li>* </ul>** <p>A thread in the waiting state is waiting for another thread to* perform a particular action.** For example, a thread that has called <tt>Object.wait()</tt>* on an object is waiting for another thread to call* <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on* that object. A thread that has called <tt>Thread.join()</tt>* is waiting for a specified thread to terminate.*/WAITING,/*** Thread state for a waiting thread with a specified waiting time.* A thread is in the timed waiting state due to calling one of* the following methods with a specified positive waiting time:* <ul>*   <li>{@link #sleep Thread.sleep}</li>*   <li>{@link Object#wait(long) Object.wait} with timeout</li>*   <li>{@link #join(long) Thread.join} with timeout</li>*   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>*   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>* </ul>*/TIMED_WAITING,/*** Thread state for a terminated thread.* The thread has completed execution.*/TERMINATED;}

可以看出NEW(新建)、RUNNABLE(准备就绪)、BLOCKED(阻塞)、WAITING(等待-不见不散)、

TIMED_WAITING(等待-过时不候)、TERMINATED(终结)

1.3 wait和sleep

  1. sleep是Thread的静态方法;wait是Object的方法,任何对象实例都能调用。
  2. sleep不会释放锁,它也不需要占用锁;wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)
  3. 它们都可以被interrupt方法中断

1.4 并发与并行

并发:同一时间间隔内多个线程正在执行,实际上是宏观上并行,微观上串行

并行:同一时刻多个线程正在执行

1.5 管程

保证了同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个进程调用(由编译器实现)。

1.6 用户线程和守护线程

用户线程:自定义线程

主线程结束了,用户线程还在运行,jvm还存活

守护线程:比如说垃圾回收线程

没有用户线程了,只有守护线程,jvm结束

public class MyThread {public static void main(String[] args) {//使用Lambda 表达式实现这个接口,创建 线程t1Thread t1 = new Thread(() -> {//判断是否是守护线程,(后台运行的)System.out.println(Thread.currentThread().getName() + "::" + Thread.currentThread().isDaemon());while (true) {//主线程结束,程序还在运行,jvm 没停止}}, "t1");// 把他设置为守护线程 ,主线程结束这个程序没有用户线程了,结束了t1.setDaemon(false);//启动线程t1.start();System.out.println(Thread.currentThread().getName() +"结束");}
}

输出结果为:

main结束
t1::false

【JUC并发编程01】JUC概述相关推荐

  1. JUC并发编程笔记1__JUC概述、虚假唤醒问题、JUC的生产者和消费者关系、8锁问题(对象锁、类锁区别)

    目录 一.回顾 概念 线程的几个状态 wait和sleep的区别 Synchronized 和 Lock的区别 二.虚假唤醒问题 举例synchronized下的生产者.消费者模式场景 三.JUC下的 ...

  2. 【JUC 并发编程】JUC 基本概念

    ❤️ 个人主页:水滴技术

  3. 【尚硅谷】大厂必备技术之JUC并发编程——笔记总结

    [JUC并发编程01]JUC概述 关键字:进程和线程.进程和线程.wait和sleep.并发与并行.管程.用户线程和守护线程 [JUC并发编程02]Lock接口 关键字:synchronized.Lo ...

  4. 多线程进阶=》JUC并发编程02

    在JUC并发编程01中说到了,什么是JUC.线程和进程.Lock锁.生产者和消费者问题.8锁现象.集合类不安全.Callable(简单).常用辅助类.读写锁 https://blog.csdn.net ...

  5. Java JUC并发编程详解

    Java JUC并发编程详解 1. JUC概述 1.1 JUC简介 1.2 进程与线程 1.2 并发与并行 1.3 用户线程和守护线程 2. Lock接口 2.1 Synchronized 2.2 什 ...

  6. 多线程进阶=》JUC并发编程

    多线程进阶=>JUC并发编程 1.什么是JUC ​ JUC是java.util.concurrent的简写. ​ 用中文概括一下,JUC的意思就是java并发编程工具包. ​ 并发编程的本质就是 ...

  7. 爬梯:JUC并发编程(一)

    学习资源整理自:B站<狂神说> JUC并发编程 1.基础概念 JUC 就是 java.util.concurrent java到底能否自己开启线程? 答案是否定的,在创建线程的底层,使用的 ...

  8. JUC并发编程中的集合不安全问题源码解析

    JUC并发编程四:集合不安全(Java) 1.List不安全! 代码示例: package unsafe;import java.util.*; import java.util.concurrent ...

  9. ❤️《JUC并发编程从入门到高级》(建议收藏)❤️

    JUC并发编程 1.什么是JUC JUC的意思就是java并发编程工具包,与JUC相关的有三个包:java.util.concurrent.java.util.concurrent.atomic.ja ...

最新文章

  1. 汇编语言系统调用过程
  2. Web开发常见的软件架构
  3. LA 5717枚举+最小生成树回路性质
  4. 2019年六大新兴信息安全方向
  5. 图解TCP协议中的三次握手和四次挥手
  6. Python之tushare:tushare库的简介、安装、使用方法之详细攻略
  7. 利用ffmpeg转换mp4文件
  8. 解决:Intellij idea 启动项目报错 error:java: 无效的源发行版: 8
  9. vue-router 跳转原理
  10. 个推基于Docker和Kubernetes的微服务实践
  11. 详解 Qt 串口通信程序全程图文 (2)
  12. oracle分区区别,oracle范围分区表和INTERVAL分区表对于SPLIT分区的区别
  13. 软件需求最佳实践pdf_| 专家观点 | 彭瑜:PackML成功的秘诀 ——简论软件定义包装过程的最佳实践...
  14. 华为主题包hwt下载_华为EMUI系统主题文件hwt修改及制作详细教程
  15. 淘宝以图搜图接口,图片搜索商品接入指南
  16. anjuta调试caffe
  17. 水木周平戏说中国网络黑幽默!(z)
  18. 竞赛|全球物联网数据创新大赛
  19. 【上海市】青年大学习自动提醒 代码脚本
  20. 正易判讀 6-4 韓長庚 著

热门文章

  1. C#常用类库(100多个)
  2. Java容器类和包装类
  3. 逻辑分析仪抓取波形参数设置
  4. AB1601编译优化参数引发的问题
  5. 人工智能:各种知识收集----不断追加内容
  6. Bech32编码 (1)产生背景
  7. 区块链BaaS云服务(36)欧盟EBSI 区块链
  8. (chap7 确保WEB安全的HTTPS) HTTPS通信步骤
  9. sql注入——day01
  10. 初等数论--整除--公因数一定是最大公因数的因数