并发编程知识点总结 并发编程是计算机科学中非常重要的一部分,涉及到多线程编程、线程安全、锁机制等概念。本文档将总结并发编程中的重要知识点,涵盖守护线程和用户线程、线程和进程的区别、多线程中的上下文切换、死锁、活锁和饥饿、线程调度算法、线程组、Executor框架、原子操作等内容。 1. 守护线程和用户线程 在 Java 中,线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程或用户线程,通过方法 `Thread.setDaemon(bool on)`。守护线程的唯一区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务,如果全部的 User Thread 已经撤离,Daemon 没有可服务的线程,JVM 撤离。 2. 线程和进程的区别 线程是操作系统调度的最小单元,而进程是操作系统分配资源的最小单元。一个程序至少有一个进程,一个进程至少有一个线程。 3. 多线程中的上下文切换 多线程会共同使用一组计算机上的 CPU,而线程数大于给程序分配的 CPU 数量时,为了让各个线程都有执行的机会,就需要轮转使用 CPU。不同的线程切换使用 CPU 发生的切换数据等就是上下文切换。 4. 死锁、活锁和饥饿 死锁是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。活锁是任务或者执行者没有被阻塞,因为某些条件没有满足,导致一直重复尝试,失败,尝试,失败。饥饿是一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态。 5. Java 中的线程调度算法 Java 中使用时间片轮转的方式来进行线程调度,可以设置线程的优先级,会映射到下层的系统上面的优先级上,但尽量不要使用,以防止线程饥饿。 6. 线程组 ThreadGroup 类,可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式。但是,不推荐使用,因为使用有很多的安全隐患。 7. Executor 框架 Executor 框架可以解决每次执行任务创建线程 new Thread() 比较消耗性能的问题,提供了线程池来管理线程,避免了野线程和线程之间的竞争。 8. Executor、Executors 和 ExecutorService 的区别 Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。Executor 接口对象能执行我们的线程任务。ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执行的状态并且可以获取任务的返回值。 9. 原子操作 原子操作意为”不可被中断的一个或一系列操作”,在 Java Concurrency API 中有多种原子类,如 AtomicInteger、AtomicLong、AtomicReference 等。 本文档总结了并发编程中的重要知识点,希望能够帮助读者更好地理解并发编程的概念和技术。
剩余41页未读,继续阅读
- 粉丝: 59
- 资源: 2904
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 企业平台生态嵌入数据集(2000-2023年).xlsx
- 离线OCR(此软件解压后双击即可运行, 免费)
- 公开整理-上市公司员工学历及工资数据(1999-2023年).xlsx
- 公开整理-上市公司员工学历及工资数据集(1999-2023年).dta
- GDAL-3.4.3-cp38-cp38-win-amd64.whl(GDAL轮子-免编译pip直接装,下载即用)
- 基于Java实现WIFI探针的商业大数据分析技术
- 抖音5.6版本、抖音短视频5.6版、抖音iOS5.6版、抖音ipa包5.6
- 图像处理领域、QT技术、架构,可直接借鉴
- 【源码+数据库】基于Spring Boot+Mybatis+Thymeleaf实现的宠物医院管理系统
- H5漂流瓶交友源码 社交漂流瓶H5源码+对接Z支付+视频教程