目录

一、Java中的线程池是如何实现的?

二、如何自定义线程池?

三、线程池中的线程是怎么创建的?它是一开始就随着线程池的启动创建好的么?

四、如何在Java线程池中提交线程任务?

五、什么是Java的内存模型,Java中各个线程是怎么彼此看到对方变量的?


一、Java中的线程池是如何实现的?

  • 在Java中,所谓的线程池中的线程,其实是被抽象为了一个静态内部类Worker,基于AQS实现,存放在线程池的HashSet workers成员变量中;
  • 需要执行的任务存放在成员变量workQueue中,workQueue是一个阻塞队列;
  • 线程池的基本思想就是:从workQueue队列中不断取出需要执行的任务,放在Workers中进行执行;

二、如何自定义线程池?

自定义线程池是通过new ThreadPoolExecutor()指定对应的参数创建,下面给出一个示例:

private static ExecutorService getExecutorService() {return new ThreadPoolExecutor(5,  //常驻核心线程的数量5, //线程池中能够容纳同时执行的最大线程数0L, //多余的空闲线程的存活时间TimeUnit.MILLISECONDS, //时间单位:毫秒new LinkedBlockingQueue<>(5), //阻塞队列Executors.defaultThreadFactory(), //默认线程池生产工厂new ThreadPoolExecutor.AbortPolicy() //拒绝策略);}

三、线程池中的线程是怎么创建的?它是一开始就随着线程池的启动创建好的么?

线程池默认初始化后不启动worker,等待有请求时才启动。

线程池执行流程:

文字描述:任务进来时,首先执行判断,判断常驻核心线程是否处于空闲状态,如果不是,核心线程就先就执行任务,如果核心线程已满,则判断任务队列是否有地方存放该任务,如果有,就将任务保存在任务队列中,等待执行,如果满了,在判断最大可容纳的线程数,如果没有超出这个数量,就创建非核心线程执行任务,如果超出了,就调用handler实现拒绝策略。

四、如何在Java线程池中提交线程任务?

  • execute():  ExecutorService.execute()方法接收一个runnable示例,用来执行一个任务;
  • submit():  ExecutorService.submit() 方法返回的是Future对象,可以使用get()获取线程执行结果;

五、什么是Java的内存模型,Java中各个线程是怎么彼此看到对方变量的?

Java的内存模型定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这样的底层细节。此处的变量包括实例字段、静态字段和构成数组对象的元素,但是不包括局部变量和方法参数,因为这些是线程私有,不会被共享,不存在资源竞争问题。

Java中定义了主内存和工作内存的概念:所有的变量都存储在主内存中,每条线程还有自己的工作内存,保存了被该线程使用到的变量的主内存的副本拷贝,线程对变量的所有操作(读取、赋值)都必须在自己的工作内存中完成,不能直接读写主内存中的变量,不同的线程之间也无法直接访问对方工作内存的变量,线程之间变量值的传递需要通过主内存来完成。

并发编程常见面试题总结四相关推荐

  1. 总结并发编程常见面试题

    Hello,你好呀,我是大白(●-●) 目录标题 并发编程常见面试题 并发编程常见面试题 在Java中守护线程和用户线程的区别? 线程与进程的区别 什么是多线程中的上下文切换 死锁与活锁的区别,死锁与 ...

  2. Java并发编程—常见面试题

    建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...

  3. 并发编程常见面试题Synchronized 相 关 问 题

    Synchronized 相 关 问 题 问 题 一 : Synchronized 用 过 吗 , 其 原 理 是 什 么? 这 是 一 道 Java 面 试 中 几 乎 百 分 百 会 问 到 的 ...

  4. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习 面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  5. html5 将id的值用于top_web前端分享HTML5常见面试题集锦四

    web前端分享HTML5常见面试题集锦四 1.为什么要初始化CSS样式? 答案:因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异. 当 ...

  6. 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(四)

    [前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 --   [下载]本人刚学习Jav ...

  7. java 并发 面试_Java 并发基础常见面试题总结

    1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启 ...

  8. “约见”面试官系列之常见面试题第四十三篇之页面输入url之后发生了什么?(建议收藏)

    本文主旨:帮助自己理清页面输入url地址之后的一个整体流程 首先,用户第一次向服务器发送对应url地址请求,此时,客户端没有缓存 1.用户输入url通过DNS解析为对应的IP地址. 2.应用层:HTT ...

  9. “约见”面试官系列之常见面试题第四十二篇之原型和原型链(建议收藏)

    原型和原型链的理解:(面试题) 原型:每个函数都有 prototype 属性,该属性指向原型对象:使用原型对象的好处是所有对象实例共享它所包含的属性和方法. 原型链:主要解决了继承的问题:每个对象都拥 ...

  10. 电子专业 常见面试题 (四)

    模拟电路 1.    基尔霍夫定理的内容是什么?(仕兰微电子)  基尔霍夫电流定律是一个电荷守恒定律,即在一个电路中流入一个节点的电荷与流出同一个 节点的电荷相等. 基尔霍夫电压定律是一个能量守恒定律 ...

最新文章

  1. JavaScript(3)之——对象的属性描述符
  2. 数据结构图之二(最小生成树--克鲁斯卡尔算法)
  3. 吴裕雄--天生自然 物理学习与探索笔记:电功、电路以及欧姆定律
  4. Cobertura代码覆盖率测试
  5. 安装系统显示sql服务器未安装,mssqlserver服务未安装怎么办 mssqlserver怎么安装
  6. yii2不用composer使用redis
  7. 目标检测(四)--ICF
  8. python矩阵运算_python 矩阵运算
  9. android系统的图标大小,android开发中手机图标大小的问题
  10. 关于“程序员996”,互联网大神发话了,能顶用吗?
  11. 刚开始参加工作的45条建议
  12. java打开客户端程序_Java客户端服务器应用程序 - 已在使用的地址:connect
  13. 如果睡眠不足,我们的大脑会怎么样?
  14. BZOJ 3699 GAL的数组
  15. AI绘图参数设置和一些注意点
  16. 云化要求下,数据库架构的演进
  17. 合肥工业大学宣城校区Java技术实验四 Java Web编程
  18. 【LeetCode】417. Pacific Atlantic Water Flow 太平洋大西洋水流问题
  19. 英文内容如何进行翻译
  20. LinuxC++:网络编程(一)最原始服务端及客户端代码实现和函数释义

热门文章

  1. 算法:从有序数组中移除重复的数据26. Remove Duplicates from Sorted Array
  2. PyTorch搭建LeNet-5模型(在MNIST数据集上准确率接近100%)
  3. python创建员工_Python综合练习之创建员工信息表
  4. Maximum Score After Splitting a String
  5. eclipse闪退问题
  6. 【动态主席树】ZOJ 2112【树状数组+主席树】
  7. HDU 1394 求逆序数(线段树)
  8. 使用QueenSono从ICMP提取数据
  9. 复旦nlp实验室 nlp-beginner 任务二:基于深度学习的文本分类
  10. Codeforce 1800Difficulty Graphs 20 questions