- 基本概念:
- 进程:执行程序的一次执行过程,是系统进行资源分配和调度的基本单位,其中,程序是指令和数据的有序集合
- 线程:CPU调度和执行的单元,最小的处理单元
- 进程和线程之间的关系:
- 一个进程可以有多个线程
- 资源分配给进程,同一进程的所有线程共享进程的所有资源
- CPU运行的是线程
- 并发和并行:
- 并行:同一时刻,多个任务同时执行
- 并发:执行多个任务,能顺利的来回切换。并发包含并行
- 多核CPU能够支持多线程并行执行,单核CPU只能支持多线程的并发执行
- 同步和异步:
- 同步:发送消息,需要等结果放回才能继续下面的步骤
- 异步,不需等待,可以执行下面的步骤
- 多线程
- 创建方式:
- 继承Thread类实现多线程,主线程调用此类对象的start()开始线程,线程执行run()方法。
- 实现Runnable()接口实现多线程,主线程中通过向Thread对象传递,类对象作为参数,调用Thread对象的start()方法开始线程,线程执行run()方法。
- 实现Callable(JDK1.5),实现与实现Runnable()接口相同,线程执行call()方法,有返回值。
- 通过线程池调用:通过Executor 的工具类可以创建三种类型的普通线程池
- 固定大小的线程池
- 单线程池
- 缓存线程池
- 线程的状态(由CPU调度)
- 初始状态:new出一个线程实例
- 就绪状态:等待CPU调度的状态(开始调用start()方法,当前线程sleep()结束,其他线程join()结束)
- 运行状态:CPU正在执行的线程
- 阻塞状态:执行上锁的方法区或代码块,需等待锁的释放
- 等待状态:使程序暂停一段时间再执行(sleep()),或等另外一个程序执行完毕再执行(wait(),notify())
- 结束状态:线程停止(结束或出错)
- 三大特性:
- 原子性:一个线程要么执行,要么不执行
- 可见性:当一个线程对数据进行修改,其他线程能够立刻知道这个修改。当一个共享变量被volatile(修饰变量时,每次读取更新,都是在内存中读取,而不是从CPU cache中读取)修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。synchronized和Lock也能保持可见性。
- 有序性:程序执行的顺序按照代码的先后顺序执行。
- 线程池:
- 核心参数:
- corePoolSize:线程池的核心大小,队列没满时,线程最大并发数
- maximumPoolSize:最大线程大小,队列满后线程能容纳的最大并发数
- workQueue:任务队列,用来保存等待执行的任务
- keepAliveTime:空闲线程等待回收的时间限制
- unit:keepAliveTime时间单位
- threadFactory:创建线程的工厂,一般默认即可
- handler:
- 核心参数:
- 创建方式:
多线程多进程
最新推荐文章于 2024-06-23 09:30:00 发布
本文详细介绍了多线程和多进程的概念,包括进程与线程的关系、并发与并行的区别、同步与异步的概念。讲解了线程的创建方式、线程的状态及其三大特性,并探讨了线程池的工作原理和核心参数。此外,还讨论了线程间的通信机制、锁的类型和优化策略,以及死锁问题。最后,提到了进程间通信的多种方式,如管道、信号、消息队列、内存映射和套接字,并简述了Java进程间通信的实现方式。
摘要由CSDN通过智能技术生成