线程
线程,是程序执行的最小单元。线程是进程中的其中一个实体,是被系统独立调度和分派的基本单位
- 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源
- 它可与同属一个进程的其它线程共享进程所拥有的全部资源。
- 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
并发与并行
并发:一个应用程序的多个线程可以是并发的
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
所有的并发处理都有排队等候,唤醒,执行等这样的步骤
并行:并行是多个应用程序在同一时间运行,例如在多核处理器上。
并不存在像并发那样竞争,等待的概念。
多线程
一个应用程序有一个以上的线程,我们把这种情况就称之为多线程。
线程池
线程池是指在初始化一个多线程应用程序过程中创建一个线程集合
然后在需要执行新的任务时重用这些线程而不是新建一个线程(提高线程复用,减少性能开销)
线程使用完回到池子中,然后等待下一次分配任务。
线程池作用就是限制系统中执行线程的数量。
根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。
用线程池控制线程数量,其他线程排队等候。
Java线程池框架
线程池分为三种:
- 基础线程池ThreadPoolExecutor
- 延时任务线程池 ScheduledThreadPoolExecutor
- 分治线程池ForkJoinPool。
Executor: 线程池的最上层接口,提供了任务提交的基础方法。 ExecutorService: 提供了线程池管理的上层接口,如池销毁、任务提交、异步任务提交。 ScheduledExecutorService: 提供任务定时或周期执行方法的 ExecutorService。 AbstractExecutorService: 为 ExecutorService 的任务提交方法提供了默认实现。 ThreadPoolExecutor: 大名鼎鼎线程池类,提供线程和任务的调度策略。 ScheduledThreadPoolExecutor: 属于线程池的一种,它可以允许任务延迟或周期执行,类似java的Timer。 ForkJoinPool: JDK1.7加入的成员,也是线程池的一种。 只允许执行 ForkJoinTask 任务,它是为那些能够被递归地拆解成子任务的工作类型量身设计的。 其目的在于能够使用所有可用的运算资源来提升应用性能。 Executors: 创建各种线程池的工具类。