线程

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

  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:
创建各种线程池的工具类。

JUC 一 线程池的更多相关文章

  1. 细说JUC的线程池架构

    前言 线程的创建是需要JVM和OS(操作系统)相互配合的,一次的创建要花费许多的资源. 1.首先,JVM要为该线程分配堆栈和初始化大量内存块,栈内存至少是1MB. 2.其次便是要进行系统的调用,在OS ...

  2. JUC自定义线程池练习

    JUC自定义线程池练习 首先上面该线程池的大致流程 自定义阻塞队列 首先定义一个双向的队列和锁一定两个等待的condition 本类用lock来控制多线程下的流程执行 take和push方法就是死等, ...

  3. 【转】JUC下面线程池介绍

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  4. JUC之线程池-三大方法-七大参数-四种拒绝策略

    线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...

  5. JUC之线程池基础

    线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...

  6. JUC之线程池基础与简单源码分析

    线程池 定义和方法 线程池的工作时控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等待其他线程执行完成,再从队列中取出任 ...

  7. JUC之线程池的实现原理以及拒绝策略

    线程池实现原理 向线程池提交任务后,线程池如何来处理这个任务,之前我们了解了7个参数,我们通过这些参数来串联其线程池的实现原理. 1.在创建了线程池后,开始等待请求 2.当调用execute()方法添 ...

  8. 【JUC】JUC线程池框架综述

    一.前言 在分析完了JUC的锁和集合框架后,下面进入JUC线程池框架的分析,下面给出JUC线程池的总体框架,之后再逐一进行分析. 二.JUC线程池框架图 说明:从上图可知,JUC线程池框架中的其他接口 ...

  9. JUC包的线程池详解

    为什么要使用线程池 创建/销毁线程需要消耗系统资源,线程池可以复用已创建的线程. 控制并发的数量.并发数量过多,可能会导致资源消耗过多,从而造成服务器崩溃.(主要原因) 可以对线程做统一管理. JUC ...

随机推荐

  1. [转]【Git】rebase 用法小结

    https://www.jianshu.com/p/4a8f4af4e803 本文主要参考 https://git-scm.com/docs/git-rebase rebase在git中是一个非常有魅 ...

  2. Django之template操作

    一.模板渲染的原理 (一)使用 模板渲染首先有一个模板对象Template,然后有一个上下文对象Context,通过render方法进行渲染,最后返回字符串,render方法的本质还是调用了HttpR ...

  3. Android开发 VideoView视频播放详解

    前言 VideoView是Android主要的视频播放View,它其实是对MediaPlayer的再次封装.如果你已经了解过MediaPlayer在使用VideoView是十分简单的.如果你想先了解M ...

  4. js中获取basePath

    单独js文件中el不能获取,通过以下方式获取1 var location = (window.location+'').split('/'); var basePath = location[0]+' ...

  5. SpringCloud---分布式服务跟踪---Spring Cloud Sleuth

    1.概述 1.1 为什么要用到服务跟踪? 随着业务的发展,系统规模也会变得越来越大,各服务之间的调用关系也变得越来越错综复杂: 通常一个由客户端发起的请求   在后端系统中会经过多个不同的微服务调用  ...

  6. Thread.Join理解

    Thread.Join:Blocks the calling thread until a thread terminates MainThread里面起了一个SubThread,从SubThread ...

  7. Jmeter-【If控制器】-__jexl3函数&__groovy函数

    一.使用场景 根据请求返回结果中某一字段的取值判断往下走的流程.例如: 二.__jexl3函数实现 格式:${__jexl3(,)} 三.__groovy函数实现 格式:${__groovy(,)}

  8. Delphi 左键代替右键

    Delphi 左键代替右键: var Pt: TPoint; begin GetCursorPos(Pt); PopupMenu1.Popup(Pt.X, Pt.Y); end;

  9. css3布局篇(双飞翼)

    大家看到好多电商网站都见过经典三列布局,它也叫做圣杯布局 ,是Kevin Cornell在2006年提出的一个布局模型概念,这个在国内最早是由淘宝UED的工程师传播开来,在中国也有叫法是双飞翼布局,它 ...

  10. qt中使用sqlite存储数据

    一.sqilte的安装 在Windows上安装SQLite: 请访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件. 您需要下载 sqlite-tools-win32-*.zi ...