JUC 一 线程池

线程

线程,是程序执行的最小单元。线程是进程中的其中一个实体,是被系统独立调度和分派的基本单位

  1. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源
  2. 它可与同属一个进程的其它线程共享进程所拥有的全部资源。
  3. 一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

并发与并行

并发:一个应用程序的多个线程可以是并发的
并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
所有的并发处理都有排队等候,唤醒,执行等这样的步骤

并行:并行是多个应用程序在同一时间运行,例如在多核处理器上。
并不存在像并发那样竞争,等待的概念。

多线程

一个应用程序有一个以上的线程,我们把这种情况就称之为多线程。

线程池

线程池是指在初始化一个多线程应用程序过程中创建一个线程集合
然后在需要执行新的任务时重用这些线程而不是新建一个线程(提高线程复用,减少性能开销)
线程使用完回到池子中,然后等待下一次分配任务。

线程池作用:
限制系统中执行线程的数量。
根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。
用线程池控制线程数量,其他线程排队等候。

Java线程池框架

线程池分为三种:

  1. 基础线程池ThreadPoolExecutor
  2. 延时任务线程池 ScheduledThreadPoolExecutor
  3. 分治线程池ForkJoinPool。
Executor:
    线程池的最上层接口,提供了任务提交的基础方法。

ExecutorService:
    提供了线程池管理的上层接口,如池销毁、任务提交、异步任务提交。

ScheduledExecutorService:
    提供任务定时或周期执行方法的 ExecutorService。

AbstractExecutorService:
    为 ExecutorService 的任务提交方法提供了默认实现。

ThreadPoolExecutor:
    线程池类,提供线程和任务的调度策略。

ScheduledThreadPoolExecutor:
    属于线程池的一种,它可以允许任务延迟或周期执行,类似java的Timer。

ForkJoinPool:
    JDK1.7加入的成员,也是线程池的一种。
    只允许执行 ForkJoinTask 任务,它是为那些能够被递归地拆解成子任务的工作类型量身设计的。
    其目的在于能够使用所有可用的运算资源来提升应用性能。

Executors:
    创建各种线程池的工具类。

猜你喜欢

转载自www.cnblogs.com/loveer/p/11414155.html