范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java面试题多线程22道必看面试题

  1.并行和并发有什么区别?
  发(concurrency)和并行(parallellism)是:
  解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
  解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
  解释三:在一台处理器上"同时"处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群
  所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
  如下图:
  并发 = 两个队列和一台咖啡机。
  并行 = 两个队列和两台咖啡机。 2. 线程和进程的区别?
  · 性质不同
  进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
  线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
  · 适用范围不同
  使用进程目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。
  线程为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。 3. 守护线程是什么?
  守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。 4. 创建线程有哪几种方式?
  创建线程有三种方式: 继承 Thread 重写 run 方法; 实现 Runnable 接口; 实现 Callable 接口。 5. 说一下 runnable 和 callable 有什么区别?
  runnable 没有返回值,callable 可以拿到有返回值,callable 可以看作是 runnable 的补充。 6. 线程有哪些状态?
  线程的状态: NEW 尚未启动 RUNNABLE 正在执行中 BLOCKED 阻塞的(被同步锁或者IO锁阻塞) WAITING 永久等待状态 TIMED_WAITING 等待指定的时间重新被唤醒的状态 TERMINATED 执行完成 7. sleep() 和 wait() 有什么区别?类的不同:sleep() 来自 Thread,wait() 来自 Object。 释放锁:sleep() 不释放锁;wait() 释放锁。 用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。 8. notify()和 notifyAll()有什么区别?
  notifyAll()会唤醒所有的线程,notify()之后唤醒一个线程。notifyAll() 调用后,会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。而 notify()只会唤醒一个线程,具体唤醒哪一个线程由虚拟机控制。 9. 线程的 run() 和 start() 有什么区别?
  start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。 10. 创建线程池有哪几种方式?
  线程池创建有七种方式,最核心的是最后一种: newSingleThreadExecutor():它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目; newCachedThreadPool():它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过 60 秒,则被终止并移出缓存;长时间闲置时,这种线程池,不会消耗什么资源。其内部使用 SynchronousQueue 作为工作队列; newFixedThreadPool(int nThreads):重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列,任何时候最多有 nThreads 个工作线程是活动的。这意味着,如果任务数量超过了活动队列数目,将在工作队列中等待空闲线程出现;如果有工作线程退出,将会有新的工作线程被创建,以补足指定的数目 nThreads; newSingleThreadScheduledExecutor():创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度; newScheduledThreadPool(int corePoolSize):和newSingleThreadScheduledExecutor()类似,创建的是个 ScheduledExecutorService,可以进行定时或周期性的工作调度,区别在于单一工作线程还是多个工作线程; newWorkStealingPool(int parallelism):这是一个经常被人忽略的线程池,Java 8 才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序; ThreadPoolExecutor():是最原始的线程池创建,上面1-3创建方式都是对ThreadPoolExecutor的封装。 11. 线程池都有哪些状态?RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。 TIDYING:所有的任务都销毁了,workCount 为 0,线程池的状态在转换为 TIDYING 状态时,会执行钩子方法 terminated()。 TERMINATED:terminated()方法结束后,线程池的状态就会变成这个。 12. 线程池中 submit() 和 execute() 方法有什么区别?execute():只能执行 Runnable 类型的任务。 submit():可以执行 Runnable 和 Callable 类型的任务。
  Callable 类型的任务可以获取执行的返回值,而 Runnable 执行无返回值。 13. 在 Java 程序中怎么保证多线程的运行安全?方法一:使用安全类,比如 Java. util. concurrent 下的类。 方法二:使用自动锁 synchronized。 方法三:使用手动锁 Lock。
  手动锁 Java 示例代码如下: Lock lock = new ReentrantLock(); lock. lock(); try {     System. out. println("获得锁"); } catch (Exception e) {     // TODO: handle exception } finally {     System. out. println("释放锁");     lock. unlock(); }14. 多线程中 synchronized 锁升级的原理是什么?
  synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。
  锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。 15. 什么是死锁?
  当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。 16. 怎么防止死锁?尽量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。 尽量使用 Java. util. concurrent 并发类代替自己手写锁。 尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。 尽量减少同步的代码块。 17. ThreadLocal 是什么?有哪些使用场景?
  ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
  ThreadLocal 的经典使用场景是数据库连接和 session 管理等。 18. 说一下 synchronized 底层实现原理?
  synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,Java 虚拟机 对此进行了大刀阔斧地改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased Locking)、轻量级锁和重量级锁,大大改进了其性能。 19. synchronized 和 volatile 的区别是什么?volatile 是变量修饰符;synchronized 是修饰类、方法、代码段。 volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性。 volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。 20. synchronized 和 Lock 有什么区别?synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。 synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 lock 需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁。 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。 21. synchronized 和 ReentrantLock 区别是什么?
  synchronized 早期的实现比较低效,对比 ReentrantLock,大多数场景性能都相差较大,但是在 Java 6 中对 synchronized 进行了非常多的改进。
  主要区别如下: ReentrantLock 使用起来比较灵活,但是必须有释放锁的配合动作; ReentrantLock 必须手动获取与释放锁,而 synchronized 不需要手动释放和开启锁; ReentrantLock 只适用于代码块锁,而 synchronized 可用于修饰方法、代码块等。 22. 说一下 atomic 的原理?
  atomic 主要利用 CAS (Compare And Wwap) 和 volatile 和 native 方法来保证原子操作,从而避免 synchronized 的高开销,执行效率大为提升。
  如需要更多面试资料可私信"面试"给小编获取哟~

极致便携,快速剃须好物推荐须眉便携剃须刀T3在社会节奏飞快的今天,每天为工作学习忙碌奔波,剃须净面时刻保刚干干净净不油腻状态,特别是经常出差的时候,带一个合适的剃须刀是非常有必要的,最近朋友推荐了一款须眉便携剃须刀T3,评价中度听损戴什么助听器是适合?您好,建议到店测听,试听,验配师会根据您的情况选择合适助听器最好到听力中心那里做个全面检查,然后验配师会根据您的具体情况推荐助听器让您试听。最好到专业的听力中心,还有就是分店比较多关于农村老人用智能手机一些趣事有哪些?我妈第一次用智能机还是我换下来的老手机,一开始是不用的,看到我那么好的手机(我妈觉得是好手机,其实已经用旧了,反应慢了)不用了觉得可惜才学着用的。一开始用手机最让我哭笑不得的是微信Linux常用的系统工作命令1echoecho命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用,在终端下打印变量value的时候也是常常用到的在江苏宿迁京东买台电视,到货没有仔细验货,发现屏裂对方不换货也不维修该怎么办?不请自来。首先想说明一点的就是这件事题主真的不占理啊,按照题主的描述根本没有办法确定到底是收货之前电视机就已经出问题了,还是说是收货之后才出的问题,而且题主也没有相关的证据,单靠说手机体验店的手机上连的充电线有什么作用?1首先我不知道你问这个问题的动机是什么啊,是想单纯的了解一下也罢,还是想去偷手机也行(开个玩笑),处于对于问答的态度我还是选择告诉你。2这根线除了充电之外更多的是就是起防盗的作用了高通骁龙835和联发科X30,谁更强?我们可以直接回答是骁龙835,但是依然仔细的讲讲联发科X30,毕竟X30也不容易。小米6和魅族Pro7实测出真知。骁龙835作为业界首个商用10nm制程工艺的移动平台,其采用了全新华为荣耀8X与红米Note7比较,哪款更好?感谢您的阅读!如果,单看价格的话,红米note7要更胜一筹。而雷军的发布会中,就认认真真的比较了荣耀8x和红米note7之间的区别,在他的比较中,红米note7在处理器以及拍照表现小米,vivoOPPO我选哪个?自从华为陷入芯片危机后,国产手机的代表就只剩下小米vivoOPPO了。要说选哪个,这没有标准答案,每一家都有自己的拿手绝活。消费者如何选择还是要根据自己的预算需求等进行综合考虑,毕有什么国产手机值得推荐,现在用的手机太卡?我来说下我的手机吧。一加5可能你们都没有听过这个牌子捂脸捂脸捂脸捂脸捂脸是在2017年5月份京东买的,花了我2999。一直用到我现在,此时正拿着我的一加5回答问题呢平时电话肯定是很华为手机和小米手机你会选择哪一个?只要华为生产手机,我就支持华为,购买华为手机。2012年第一个安卓系统的手机是华为的,移动定制版,质量的确定很好!后来卡到不能用了,尝尝鲜用了小米手机,现在一直用小米手机,没有为什
持续高温,空调都脱销!还好家里有飞利浦无叶风扇前言炎炎夏日,别人都在享受空调的冰凉,我却不能受用空调,好在有飞利浦无叶风扇助力。随着科技的不断发展,从落地简易,挂墙摇头风扇到迷你风扇不知换了多少个。作为飞利浦老粉,家里很多小家三禾铁锅返璞归真,返璞但不落后不粘锅,防铁锈前言民以食为天,中国的美食文化更是博大精深。家长们为了能让孩子健康成长可以说是不惜一切代价要让孩子吃得健康营养均衡,作为一名妈妈我也不列外。自从有了孩子我家的厨具是没少换,不起烟的一锅两用,快享美食大宇压力锅体验分享大家好,我是南北桃源压力锅对于我们这一代人来说,是一个抹不去的记忆。小时候在村里大家都会用高压锅煮饭,听到压力锅泄压阀那鸣笛一般的叫声后,就知道米饭熟了,到饭点了该回家吃饭了。当年去女上司家里聚餐,洗手间没洞该咋办?哈哈哈哈,评论区好沸腾前几天女上司邀我们去她家里聚餐,这个女上司真的很聪明,他每次跟我们去看的时候都会聊一些工作话题,但是他又不会给我们加班费,只会给我们点一些外卖吃,前几天去他家里吃饭的时候,我也遇到回炉再炼成就人生二次起飞来自北京的肖仑,集广告创意策划导演多重身分,甚至曾粉墨登场担任广告代言人,在中国广告界可算是灸手可热的领军人物。正当事业如日方中之际,肖仑选择重过校园生活,于2019年来港入读香港担心买到的千篇一律?海尔智家场景定制化拿下工业4。0TOP15月30日,德本咨询eNet研究院与互联网周刊联合发布2021工业4。0创新TOP50名单,上榜企业覆盖家电汽车电气科技等众多行业。其中,合肥海尔电冰箱吉利临海工厂中天科技数智工厂一千元!我把MacMini变成了笔记本前言熟悉特特的人都知道我是海外记者并且兼职摄影工作,国内有家,国外也有家。因为需要经常回国,我在国外的房子主张使用笔记本作为电脑主机并且连接显示器使用。这样我会过只需要带笔记本就好从接入网的角度看,政企专线比家庭宽带贵在哪?什么是政企专线?什么是公众宽带?简单解释一下两个概念政企专线,就是应用于政府企业事业单位的专用线路,比如互联网专线同城互联等等。家庭宽带,家庭用的宽带,在接入网角度,严格来说,不单A4纸的大小却有如此强悍性能!ROG幻13轻薄全能本体验前言自打去年ROG发布了幻系列14寸轻薄全能本之后,就在数码圈掀起一阵浪潮,用户都在感叹小小机身竟有如此强悍性能。这个系列就像是梅赛德斯奔驰A45AMG,被大家亲切地称之为全能小钢企业云网焕新2020启动会圆满完成2020年4月8日上午10点,鹏博士企业云网焕新2020启动会于北京雍和航星园2号楼4层隆重举办,取得圆满成功。企业云网事业部总经理宋春生重客事业部云网事业部经管中心产品中心客服中小米有品上架宅男键盘!289元对标樱桃罗技,队友感觉起飞了你们知道吗,鸡哥其实是一个非常有名的键盘侠!!!每天上班对着电脑,双手对着键盘噼里啪啦的敲打一顿,下班后,写稿子也要噼里啪啦的敲上好几个小时的键盘。说实话,公司的辣鸡键盘我是真的忍