Java的线程与线程池(程序猿必看)

之前看到别人写的多线程方法,自己用得不知所以然,感觉很强大同时自己又很好奇。Java的多线程是高阶必须学习的知识,现在把网络上查询到的理论知识特别整理一下。

简单介绍

  创建线程有两种方式:继承Thread或实现Runnable。Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自己的run()方法。

  一个线程创建后就存在,调用start()方法就开始运行(执行run()方法),调用wait进入等待或调用sleep进入休眠期,顺利运行完毕或休眠被中断或运行过程中出现异常而退出。

  wait和sleep比较:

  sleep方法有:sleep(long millis),sleep(long millis, long nanos),调用sleep方法后,当前线程进入休眠期,暂停执行,但该线程继续拥有监视资源的所有权。到达休眠时间后线程将继续执行,直到完成。若在休眠期另一线程中断该线程,则该线程退出。

  wait方法有:wait(),wait(long timeout),wait(long timeout, long nanos),调用wait方法后,该线程放弃监视资源的所有权进入等待状态;

  wait():等待有其它的线程调用notify()或notifyAll()进入调度状态,与其它线程共同争夺监视。wait()相当于wait(0),wait(0, 0)。

  wait(long timeout):当其它线程调用notify()或notifyAll(),或时间到达timeout亳秒,或有其它某线程中断该线程,则该线程进入调度状态。

  wait(long timeout, long nanos):相当于wait(1000000*timeout + nanos),只不过时间单位为纳秒。

  线程池的作用:

  线程池作用就是限制系统中执行线程的数量。

  根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列。

  为什么要用线程池:

  减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务

  可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

  线程池:

  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。

  假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。

  如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。

  一个线程池包括以下四个基本组成部分:

  1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;

  2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;

  3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;

  4、任务队列(taskQueue):用于存放没有处理的任务。提供一种缓冲机制。

  线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。

  线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目,看一个例子:

  假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池大小是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。

时间: 2024-10-08 05:55:57

Java的线程与线程池(程序猿必看)的相关文章

程序猿必看交互设计

本文作者 Pasquale D'Silva 是 Elepath 的一位交互设计师兼产品设计师,在本文中,他从交互的角度阐释了优秀的设计应该具有的一些品质,或者说,优秀的产品该如何实现与用户的自然沟通. 不得不说,有太多程序猿或者美工(注意,是美工,真正的设计师不会这么干)误把技术当艺术.把漂亮当设计了,真正重要的交互部分反而被忽略,你可以看看,一大批的产品都是近乎静态的,许多操作诡异至极,诸如你想添加一个条目到列表里,它就生硬的出现在那;你想删除,它就直接消失.这样的产品经理,你们到底有没有考虑

每一个程序猿必知之SEO

似乎由于受这篇文章的影响 http://katemats.com/what-every-programmer-should-know-about-seo/ 于是我也觉得我应该写一个每一个程序猿必知之SEO.作为一个擅长前端兼SEO的设计师. 搜索引擎是如何工作的 假设你有时间,能够读一下谷歌的框架: http://infolab.stanford.edu/~backrub/google.html 这是一个老的,有些过时纸.但非常平易近人,甚至在我们中间的非白皮书的读者图标微笑什么每一个程序猿都应

程序猿得看的经典好书

READING Algorithm C C++ Coding Java Linux Network OS 其实想写这篇文章的缘由是因为看了微信公众号菜鸟教程推荐的那篇编程入门技巧大全,对于它说的一点我非常赞同就是多看好书,多读经典,并对它推荐的经典书籍作了记录,以方便后面可以拜读. 什么叫好书 差书会误人子弟,不但浪费了时间和精力,更可怕的是他会打击人的自信心,会让人越来越怀疑自己的学习能力.而好书虽然好,但是数量却很少,特别是被大家公认很有价值的好书更是少之又少.历经多年时间考验和市场风雨的残

java架构师之路:JAVA程序员必看的15本书的电子版下载地

转自:http://www.shangxueba.com/faq/view376.html 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们. 一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java

程序员必看:如何降低APP软件开发的成本?

程序员必看:如何降低APP软件开发的成本? 作为一名曾经的程序猿,一直想写一点东西给大家分享一下,今天终于动笔了,写写我们在开发的过程中怎样才能更快更好的进行开发,降低app开发成本.无论是个人开发者,还是公司的技术人员,成本是需要考虑的一个很关键的因素,充分考虑成本,降低生产成本之后才会获得相应的竞争优势.如何降低APP软件开发的成本?听我慢慢给您说. 1. 良好的功能需求文档 没有文档化的需求,系统就存在不能满足客户期望的隐患.“比如,也许它不能按照客户认为应该的方式工作,即便是开发团队认为

程序员必看的书之iOS程序员

前几天发布了一篇程序员必看的书,现在的IT人,程序员们不要一味的敲代码,我们也要有时间为自己充充电,买个kindle,公车,地铁上可以多多看看书.接下来我将为程序员们继续推荐一下比较好书.如果你觉得我推荐的这些书有用,就多看会,如果觉得推荐的不好,那就不要看了,就这么简单.如果你觉得我推荐的书是菜鸟才看的书,那您这位老鸟出门左转.希望给大家带来帮助. Objective-C 2.0程序设计 本书是Objective-C领域的经典著作,对Objective-C进行了系统而全面的阐述,权威性毋庸置疑

程序员必看书籍(转载)

程序员必看书籍(转载) C++: Prata<C++ Primer Plus>:基础,第一本书.(之前的版本也可,不过推荐最新的) Lippman<Inside C++ Object Model>:初级,加深语言层次上的理解.不过有点小老了.里面的cfront编译器早退出江湖好久了.思想值得学习 侯捷<STL源码剖析>:第三本书,中级,深入STL Vandevoorde<C++ Template>:第四本,中级,范式编程 罗剑锋<Boost>两本

程序员必看的书(九)

程序员的必看的书已经更新到第九章了,想必大家也都烦了,不过还是有人喜欢的,再次声明我推荐的这些书有些没有看过,不过这些书都是不错的,根据豆瓣评分,以及朋友的阅读都说可以看. 在这里希望可以帮助一些人想看技术书,不知道怎么看的程序员们.再次请大家多多支持,如果大家也有不错的书推荐,也可以投稿.谢谢大家.对了IT江湖iOS客户端上线了,大家可以去Appstore下载,项目开源地址请看文章下方. 计算机程序的构造和解释 本书1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年

程序员必看的十大电影

程序员必看的十大电影 1. 骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等. 这部具有革命性的电影.一种文明的结束是另一种文明的开始.它成了后来的很多电影效仿的对象. 2. 环形使者(2012) 概念:循环 如果生活变成了一种无休无止的循环,如何终止它? 3. 创:战记(2010) 概念:虚拟和现实 很多到了年纪的计算机科学家都会承认,他们对计算机计算或战争游戏的热爱来自一种憧憬. 4. 遇见未来(2007) 概念:递归 这部电影运用到了计算机里递归的概念,特别是最后的搜索那部分,那