应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Java开发之线程多线程,线程池面试题

  什么是多线程
  多线程就是在同一时刻执行多个线程,举个简单易懂的例子,多线程相当于一条马路上的多条车道,单车道行驶车辆速度较慢,且可能产生拥堵,多车道可缓解车速、拥堵情况。
  多线程不是为了提高程序的执行速度,而是为了提高程序的使用率开发中多线程的应用场景
  1、后台任务,例如:定时向大量(100w以上)的用户发送邮件;
  2、异步处理,例如:发微博、记录日志等;
  3、分布式计算
  其实web服务器本身就利用的是多线程;以及各种专用服务器(如游戏服务器);创建线程的三种方式第一种方式创建
  继承Thread类,并重写Thread中的run方法
  第二种方式创建
  继承Thread类,并重写Thread中的run方法
  第三种方式创建
  实现Callable接口,重写call()方法
  有返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。
  多线程特点
  代码的运行结果与代码执行顺序后调用代码的顺序是无关的
  即线程是一个子任务,CPU以随机的时间来调用线程中的方法。
  注意:1。不能多次调用Thread中的start()方法,否则会抛出IllegalThreadStateException异常。
  2。启动线程的方法不是run()方法而是start方法,如果调用的是run()方法就是同步的,并不能异步执行。
  3。执行start()方法的顺序不代表线程启动的顺序,即并不是说,越早调用某个线程的start()方法,它就能越早的执行其中的run()方法。Callable方法是什么
  Callable接口是属于Executor,对比与Runnable接口功能的区别是:
  (1)。Callable可以在任务结束后提供一个返回值,Runnable没有这个功能
  (2)。Callable中的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常
  (3)。运行Callable可以拿到一个Future对象,Future独享表示异步计算的结果,它提供了检查计算是否完成的方法。由于线程属于异步计算模型,因此无法从别的线程中得到函数的返回值,在这种情况下,就可以使用Future来监视目标线程调用call()方法的情况,
  放调用Future的get()方法以获取结果时,当前线程就会阻塞,知道call()方法结束返回结果。
  其实还有一种情况就是使用的线程池的方式用那种方式实现多线程比较好,为什么?
  推荐实现多线程的方法实现Runnable接口
  原因:
  (1)。Thread类中定义了多种方法可以被派生类使用或重写,但是只有run()方法必须被重写的,在run()方法中实现啊这个线程的主要功能,这就是Runnable接口所需实现的方法
  (2)。通过继承Thread的实现方法与实现Runnable接口的效果相同,并且Java只能是单继承、多实现,如果一个类中已经继承其他所需的类,那实现一个接口是必须的。线程的声明周期
  当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞
  (Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直霸占着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换
  终止线程4种方式
  1、程序正常运行结束
  2、使用退出标志退出线程
  定义了一个退出标志exit,当exit为true时,while循环退出,exit的默认值为false。在定义exit
  时,使用了一个Java关键字volatile,这个关键字的目的是使exit同步,也就是说在同一时刻只
  能由一个线程来修改exit的值。publicclassThreadSafeextendsThread{publicvolatilebooleanisExitfalse;publicvoidrun(){while(!isExit){todomysomething}}}
  3、使用interrupt()方法来中断线程有两种情况:
  1、线程处于阻塞状态:
  如使用了sleep,同步锁的wait,socket中的receiver,accept等方法时,会使线程处于阻塞状态。当调用线程的interrupt()方法时,会抛出InterruptException异常。阻塞中的那个方法抛出这个异常,通过代码捕获该异常,然后break跳出循环状态,从而让我们有机会结束这个线程的执行
  通常很多人认为只要调用interrupt方法线程就会结束,实
  际上是错的,一定要先捕获InterruptedException异常之后通过break来跳出循环,才能正
  常结束run方法
  2、线程未处于阻塞状态:
  用isInterrupted()判断线程的中断标志来退出循环。当使用
  interrupt()方法时,中断标志就会置true,和使用自定义的标志来控制循环是一样的道理。
  4、stop方法终止线程(线程不安全)
  程序中可以直接使用thread。stop()来强行终止线程,但是stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是:
  thread。stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror的错误,并且会释放子线程所持有的所有锁。一般任何进行加锁的代码块,都是为了保护数据的一致性,如果在调用thread。stop()后导致了该线程所持有的所有锁的突然释放(不可控制),那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。因此,并不推荐使用stop方法来终止线程。线程池简介
  线程池:threadpool,java。util。concurrent。Executors提供了一个java。util。concurrent。Executor接口的实现用于创建线程池。是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
  线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
  Java中的4种线程池newCachedThreadPool
  创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行
  很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用execute将重用以前构造
  的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并
  从缓存中移除那些已有60秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资
  源。newFixedThreadPool
  创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大
  多数nThreads线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,
  则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何
  线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之
  前,池中的线程将一直存在。newScheduledThreadPool
  创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。newSingleThreadExecutor
  Executors。newSingleThreadExecutor()返回一个线程池(这个线程池只有一个线程),这个线程池可以在线程死后(或发生异常时)重新启动一个线程来替代原来的线程继续执行下去!线程复用
  每一个Thread的类都有一个start方法。当调用start启动线程时Java虚拟机会调用该类的run方法。那么该类的run()方法中就是调用了Runnable对象的run()方法。我们可以继承重写Thread类,在其start方法中添加不断循环调用传递过来的Runnable对象。这就是线程池的实现原理。循环方法中不断获取Runnable是用Queue实现的,在获取下一个Runnable之前可以是阻塞的。线程池的组成
  一般的线程池主要分为以下4个组成部分:线程池管理器:用于创建并管理线程池工作线程:线程池中的线程任务接口:每个任务必须实现的接口,用于工作线程调度其运行任务队列:用于存放待处理的任务,提供一种缓冲机制
  Java中的线程池是通过Executor框架实现的,该框架中用到了Executor,Executors,ExecutorService,ThreadPoolExecutor,Callable和Future、FutureTask这几个类。
  ThreadPoolExecutor的构造方法如下:
  corePoolSize:指定了线程池中的线程数量。maximumPoolSize:指定了线程池中的最大线程数量。keepAliveTime:当前线程池数量超过corePoolSize时,多余的空闲线程的存活时间,即多次时间内会被销毁。unit:keepAliveTime的单位。workQueue:任务队列,被提交但尚未被执行的任务。threadFactory:线程工厂,用于创建线程,一般用默认的即可。handler:拒绝策略,当任务太多来不及处理,如何拒绝任务。Java线程池工作过程线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当调用execute()方法添加一个任务时,线程池会做如下判断:a)如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务;
  b)如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列;
  c)如果这时候队列满了,而且正在运行的线程数量小于maximumPoolSize,那么还是要
  创建非核心线程立刻运行这个任务;
  d)如果队列满了,而且正在运行的线程数量大于或等于maximumPoolSize,那么线程池
  会抛出异常RejectExecutionException。当一个线程完成任务时,它会从队列中取下一个任务来执行。当一个线程无事可做,超过一定的时间(keepAliveTime)时,线程池会判断,如果当前运
  行的线程数大于corePoolSize,那么这个线程就被停掉。所以线程池的所有任务完成后,它
  最终会收缩到corePoolSize的大小。
  线程池都有哪几种工作队列
  ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。
  LinkedBlockingQueue一个基于链表结构的阻塞队列,此队列按FIFO(先进先出)排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors。newFixedThreadPool()使用了这个队列。
  SynchronousQueue一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors。newCachedThreadPool使用了这个队列。
  PriorityBlockingQueue一个具有优先级的无限阻塞队列。线程池原理
  线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。
  原创作者:cideGoogler
  推荐阅读:
  java开发面试之如何回收线程池中多余的线程?
  java开发技术之Executors创建线程池的弊端
  Java开发之多线程死锁问题排查与解决
  Java开发之环境搭建基础教程

阳后身体虚弱,有气无力?清代名医这个方,赶走疲劳,恢复气力最近新冠疫情第一波感染结束,80的人都处于阳康的状态。但却总是气短懒言,不想多说话,身体疲惫无力,胃口不好。拯阳理劳汤,出自明朝医家李中梓的医书《医宗必读》中。能够……数据显示超四成单身大学生不想脱单家乐福中国内地首店关闭今天的热点新闻你都知道了吗?社会类1。95号汽油本月底或将重回7元时代国际油价本周累计上涨收跌4,国内油价由最高下调500元吨缩减至420元吨,当前的降幅仍然……好春光!振兴小镇,藏不住啦正值好春光来一场说走就走的旅行吧来振兴小镇追风、追光、追云朵、追星星奔赴山野乘风而行最是一年春好处振兴赏春正当时梦里花落知多少且……稻盛和夫真正决定一个人人生高度的,是心理韧性全媒体首席记者:孙虎彪罗曼罗兰曾说过:世界上只有一种真正的英雄主义,就是认清了生活的真相之后,仍然热爱它。生活的真相是什么呢?它有幸福,有成功,也会有失……10W评价98好评率什么水平?一加Ace2让K60很尴尬智能手机发展到现在十几年了,作为消费者的我们少说也更换掉至少4部手机了。而在重复购买智能手机中,我们消费者也是明确了自己的需求,不会出现盲目购买的问题。那小伙伴们都是怎么判定智……研究气候变化致永久冻土融化,更多僵尸病毒或将被唤醒近日,欧洲研究人员从七个不同的古西伯利亚永久冻土样本中分离出13种新病毒。科学家表示,该研究显示气候变化带来了一种潜在危险:地球变暖导致的永久冻土融化可能会让大量僵尸病毒苏醒。……中国队赢了!死亡之组出线踏出坚实一步北京时间3月6日晚,男足U20亚洲杯进行了小组赛第二轮比赛的争夺。中国队凭借木塔力甫和徐彬的进球,20顽强战胜了卫冕冠军沙特阿拉伯队,取得了晋级路上的关键一胜。虽然小组首……千禧年后,十大最强常规赛MVP都有谁?有理有据,排名让你信服2000年后,NBA10大常规赛MVP单赛季最强表演都有谁?詹姆斯能上榜几次?16库里真的最强吗?雷霆三少有机会入围吗?既然是排名,就要先把评价标准说清……春日宜赏花!张家界这些地方花开了春天来了,张家界正是赏花好时节。3月13日,太极爱好者在张家界市武陵源区黄龙洞风景区的花海田园间练习太极,享受春日健身乐趣。除了油菜花海,武陵源网红民宿梓山漫居的梨花近日……一款被低估的中端手机,面对旗舰机的突飞猛进,表现极为稳定看文章听音乐是种享受,想听什么留言告知(都是付费无损包)之前有一个小伙伴在私信去询问过我们关于一台手机的事情,机型是OPPOReno9,当时因为太忙了,就把这个问题耽搁下……第六届天津海河文化旅游节开幕助推津城文商旅消费热起来3月31日,在天津海河古文化街亲水平台,游客购买津城老字号品牌的商品。当日,第六届天津海河文化旅游节暨津门老字号嘉年华活动在古文化街亲水平台举行开幕仪式。本届天津海河文化……科技驱动艺术拓新边界长期主义的技术玄机来源中国网络视听大会订阅010860920623月31日,影视科技创新发展论坛在成都举办。玄机科技董事长沈乐平与电视剧《三体》视觉导演、动画导演陆贝珂、原力数字科技CEO……
王治郅儿子年满18岁,身高超2米天赋出众,因不自律自毁前程近日有很多媒体关注到王治郅的儿子王熙麟,王熙麟今年已经年满18岁了,不过却没有办法进入CBA的赛场上拼搏较量,之所以会出现这样的情况,主要原因在于他的天赋虽然非常强悍,但是体型……新的龙飞船马上要发射,计划在4月下旬,俄罗斯舱段会配合吗?国际空间站最近的消息还是比较多的,虽然各合作国都力争地面上的矛盾不带到太空,但是这个想法有点太理想。目前太空上有两个空间站,一个是中国空间站还有一个是国际空间站。我国空间上目前……尽管中美关系紧张,但美国的主要国防企业仍在中国大量开展业务近日,美国的一家风险咨询公司StrategyRisks的首席执行官和创始人IssacStoneFish在一份声明中称,美国国防承包商与中国的关系带来了严重的风险。雷神公司……我不拜神但迷信我不拜神,但迷信〔呲牙〕这个世间没有神灵,没有所谓的前世今生,也没有救苦救难的观世音。人们总会在无助的时候给自己找些活下去的理由,才能安心,所以才会去信它,拜它,求它。至……一生是少女,永远在恋爱!这4位女星的生命里,没有爱情不能活一生是少女,永远在恋爱。娱乐圈里一直在追求恋爱的女星,还真的不少,她们的生活里啥都能少,就是不能少了恋爱。一、大S娱乐圈3月的第一场震撼,是大S带来的。她与汪小菲离……目前在售佳能尼康索尼全画幅微单大盘点各自有哪些优缺点?说起全画幅单反和微单,很多小伙伴会比较感兴趣,原因很简单:因为全画幅微单可以提供更优秀的画质和更好的高感、更美的背景虚化和标准的拍摄焦段。另外和apsc画幅相比,全画幅具有更饱……大盘下到3000点几率多大?自从2015年中国股市创下5178点高位以后大盘指数一路下滑!七年的时间起起伏伏再也没有超过4000点!正所谓天下大势分久必合合久必分!股市大势恒涨必跌!恒跌必涨!可关键……中企在瑞典首都建地铁,隧道国家队实力回击瑞媒抹黑北京日报客户端记者白波2019年,参与海外项目实施已超过十年的刘延军,迎来了自己的第一次外派任务。与绝大多数一带一路建设者不同的是,他的目的地是北欧国家瑞典,参与斯德哥尔……omg,又来一个惨烈翻车的内娱真是个让人矛盾不已的东西。你说它有意思吧,明明满屏无聊,充斥着各种尬吹互捧,在营销中自娱自乐,浑然不顾观众愤怒心情。你说它没意思吧,每天爆点还真不少,业务忙碌的……吴京为儿子索要签名被胡歌婉拒,胡歌的回复能让大家笑一年因为电影《攀登者》的拍摄,让吴京和胡歌这两位大咖有了合作的机会。在活动现场,吴京自爆儿子想通过他索要胡歌的签名,但是胡歌回应说:我两个侄儿都没来,还想要签名?幽默机智的回……美国和欧洲空间科学合作项目,多个被迫推迟,俄罗斯这事不赖我从上世纪50年代以来,人类航空航天事业取得飞速发展,第一颗人造卫星上天、第一个进入太空的宇航员、第一颗月球探测器环绕月球飞行等等,无数个第一次,将人类的视野,逐步从脚下的地球和……最新数据!10月社融增量9079亿元,M2增长11。811月10日,央行官网公布最新金融数据。10月份,中国新增人民币贷款6152亿元,货币供应量M2同比增长11。8,社会融资规模增量为9079亿元。2022年金融统计数据……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网