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

线程是什么(Java中的线程)

  在我们开始谈线程之前,不得不提下进程。
  无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解。
  进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小、卧室数量等。 如果你也这样看的话,那么房子自己不会主动做任何事情,它是被动的对象。 而线程则像是房中的居住者,它是主动的对象——居住者要使用不同的房间、看电视、煮饭、洗澡等等。 房子占据着一块真实的土地,正像进程占据着内存。 而房子的居住者可以自由出入所有的房间,而进程中的线程也是类似的,可以自由访问任何进程占据的内存。
  按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。 通过上面的比喻,我们可以更容易的理解进程和线程的关系。 进程只是一个容器对象,它负责占据资源(内存地址、文件I/O),而线程共享进程的资源,作为CPU调度的基本单位可以被独立调度。
  线程实现
  回到我们的题目:java 线程。 java 作为一个跨平台的语言,自然要提供一个跨平台的线程实现。 线程按类型可以分为内核线程(Kernel-Level Thread)和用户线程(User Thread),分类的标准主要是线程的调度者在核内还是在核外。 早期时,一些操作系统因为没有提供线程的原生实现,所以早在JDK1.2之前,java是基于用户线程来实现的。 用户线程是相对内核线程而言,内核线程自然是由操作系统内核支持的线程,由内核来管理和调度。 后来主流操作系统都支持了线程,因此现在java都采用原生线程来实现了。
  既然现在的java线程都采用原生系统线程来实现,那么是否每个java线程就对应一个系统内核线程? 对sun jdk而言,在Windows和Linux中都是采用的一对一模型,Linux提供一种称为轻量级进程(LWP)的高级抽象来避免应用直接使用内核线程。 而在像Solaris这样的系统中则不一定了,因为它支持多对多模型。 不过对于底层系统的线程模型到底如何,对java线程而言都是被屏蔽了的,jvm层面提供了一个统一的抽象线程模型。 下图展示了在Linux上java线程实现的模型图
  线程数量
  曾经碰到一个问题,java程序运行中抛出一个OOM错误如下:
  java.lang.OutOfMemoryError: unable to create new native thread
  这个问题的原因可能有两种,一种是内存真的不足了,自然无法再创建线程。 另外一种其实是来自操作系统的限制,比如在Linux中,java线程会映射为轻量级进程,那么创建线程的数量自然会受到系统进程数量等资源约束的限制。
  对于一个java进程到底能创建多少线程呢,一般我们按经验线程都是在几十到几百之间,顶多1、2k了。 这是为什么呢?java有个启动参数-Xss1m表明每个线程栈大小为1m,那么对内存一般2G的话,总线程数达到2k感觉上都是不可能的。 但实际上做个实验在循环中不断创建新线程,可以不断创建多达几万的线程,这又是为什么? 原因是新创建的线程其实仅仅分配了内存地址空间,但并没有实际去占用那1m的栈空间,栈空间是在线程使用时才去实际占用的。 所以经验是对的,一般对2G的堆内存空间线程数量根据应用类型在几十到几百之间是合适的。
  线程状态
  java定义了6种线程状态,任一时刻一个线程处于其中一种状态,其状态转换关系如下图:
  1. NEW
  新创建未启动的线程处于该状态
  2. RUNNABLE
  调用了start()方法后,线程进入RUNNABLE状态
  3. WAITING
  不设置timeout的Object.wati()、Thread.join()等方法会让线程进入无限等待,需要等待其他线程显式的唤醒。
  4. TIMED_WAITING
  Thead.sleep()或设置了timeout的Object.wati()、Thread.join()等方法让线程进入限期等待。
  5. BLOCKED
  阻塞状态,线程在等待进入同步区域。
  6. TERMINATED
  线程执行结束,终止状态。
  从上面的状态图可以看出,线程从新建、执行到结束是单向的,期间可能会经历等待和阻塞状态,线程执行结束进入终止状态后将不能再重复使用。 任何时候一个CPU核只能执行一个线程,也就是说同时并行运行的线程数与CPU核数相等。 在操作系统内核层面,线程只有分配了CPU的执行时间片,才算处于RUNNING状态。 而当有大于CPU核数的线程需要执行,没有分配到CPU执行时间片的线程则处于READY状态。 RUNNING和READY都是线程在内核的状态,同时映射到java的RUNNABLE状态。 RUNNABLE正如其名,表示可运行的状态,并非正在运行的状态。
  线程池
  java编程不可避免的要使用线程,而使用线程更常见的方式是使用线程池。 说起池这个东西,我们应该比较熟悉,例如:连接池。 其实池就是一个容器,里面有一堆预先创建好的对象,我们就称其为对象池,而当这个对象具体为线程,那就是线程池了。 前面讲线程状态说过,线程执行从run()方法退出就会进入终止状态,那么这个线程就消亡了,不能再复用。 线程池的概念就是要复用线程,避免创建开销,那么如何复用呢,其实就是要让池中的线程不用从run()方法中退出。 所以为了复用线程,池的实现会与一个阻塞队列结合,空闲时线程阻塞在队列上等待任务到来,任务执行结束后再重新阻塞,永远不会退出。
  jdk1.5引入了java.util.concurrent并发包后,我们可以很方便的通过ThreadPoolExecutor来创建线程池
  public ThreadPoolExecutor
  (
  int corePoolSize,
  int maximumPoolSize,
  long keepAliveTime,
  TimeUnit unit,
  BlockingQueue

强阳多久转弱(排卵试纸强阳多久转阴)第一排卵试纸强阳,其实就是表明马上就要排卵了,或者说是离排卵的日子越来越近了。这个周期可以是在24小时之内,或者是48小时之内发生。第二正常的排卵一般都是发生在强阳的情况下转成弱阳弱阳后多久排卵(弱阳4天大概什么时候排卵)找准排卵期是成功受孕的重要因素,那么备孕准妈到底该如何抓住自己的排卵时间呢?所谓的排卵试纸到底应该怎么用呢?今天高半米就来介绍一下排卵试纸的用法。排卵试纸的检测原理是什么呢?一般来多久见孕囊(hcg达到多少排除宫外孕)小洪去年结婚,准备怀孕半年,平时月经比较准确,这次月经超过超过1个星期还没来潮,就赶紧到医院检查,抽血HCG980IUL,孕酮约21ngml。我就建议一周后到医院检查彩超,在等待下水光多久见效(停止打水光针会怎样)目前,水光针是一种很火的皮肤美容方式,能有效地改善皮肤出现的干燥问题,具有补水嫩肤提升紧肤改善细小皱纹淡化色斑等等功效,所以深受求美者追捧。很多人知道水光注射后都想去做,想让自己的支原体阳性治疗多久(支原体感染用药几天能见效果)现在的生活中男性的疾病越来越多,而且这些疾病的发生对于男性的身体有很大的伤害,例如解脲支原体。解脲支原体的发生与性生活有很大的关系发现及时用专利利尿消炎箹丸,与性病的特点差不多,会打绒促后多久排卵(打完绒促如何判断已排卵)我16年正月结婚,结婚了就没上班打算怀孕,结婚前我们在一起半年也都没做避孕,那时候还不着急,结婚后也试过用排卵试纸什么合种方法,可是每个月都白板弄的自己越来越没信心,觉得自己有什么排卵要多久(一般强阳后多久排卵)原创文章,欢迎分享,机构转载请联系作者。文好孕姐婚后准备了3个月,然后开始造人计划,听说可以用排卵试纸准确测出排卵期,所以买回来几大盒,接近排卵期时每天测,有时一天测几次,有时会有促排卵针打后多久排卵(打促排卵针卵泡不长怎么办)我的诊室里,多囊患者占到了30还多,很多朋友备孕多年,却一直困于无法排卵,或者卵泡长不大,排不出来。而多囊的特征之一就是排卵障碍。今天,通过一篇科普文章,来给多囊患者答疑解惑。究竟打排卵针多久会排卵(打促卵泡发育的针多久起效果)内容提要哪些人适合促排卵?促排几次合适?促排一定能怀孕吗?促排卵不成功怎么办?促排卵都用什么药物?促排卵后要注意什么?促排卵有什么并发症?病例回顾王医生,我听到超声里的心脏跳动的声虾能活多久(虾生完宝宝还能活多久)从人类对生与死有清晰的认识开始,就从未停止过对长生不老的渴望和探索。在科学尚未萌芽的古代,秦始皇指派徐福前往仙山,为其寻找长生不老药,而到了现代,对冻龄的追寻与干细胞相关的研究,无生完孩子月经多久来(生完孩子流血流多久是正常的)月经是每一个女生都会存在的一种很正常的生理现象,女性一般从13岁开始会来初潮,有的可能会晚一点,以每个月来一次的频率,直到绝经了才会没有月经。月经对于女性来说是很重要的,需要每个月
查男朋友微信聊天记录(怎么查询微信的聊天记录)查男朋友微信聊天记录(怎么查询微信的聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有时分会不会有人查微信聊天记录(怎么找到微信的其他聊天记录)会不会有人查微信聊天记录(怎么找到微信的其他聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。别人能查盗取我微信聊天记录(怎么找到微信的其他聊天记录)别人能查盗取我微信聊天记录(怎么找到微信的其他聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间怎么查自己老公的微信(查老公的微信聊天记录怎么查)怎么查自己老公的微信(查老公的微信聊天记录怎么查)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有微信电脑版查聊天记录(怎么查微信里面的聊天记录)微信电脑版查聊天记录(怎么查微信里面的聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有时哪里有查微信聊天记录的(怎么查微信里面的聊天记录)哪里有查微信聊天记录的(怎么查微信里面的聊天记录)微信现已成为咱们最常用的谈天东西,因为微信的运用率十分高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有真的有查微信聊天记录的吗(怎么查微信里面的聊天记录)真的有查微信聊天记录的吗(怎么查微信里面的聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但合肥有查微信聊天记录的吗(怎么查微信里面的聊天记录)合肥有查微信聊天记录的吗(怎么查微信里面的聊天记录)微信现已成为咱们最常用的谈天东西,由于微信的运用率非常高,咱们也常常会拾掇一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但杜桥哪里有查微信聊天记录(怎么查微信里面的聊天记录)杜桥哪里有查微信聊天记录(怎么查微信里面的聊天记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但怎样查男朋友手机地方(怎么查对方的手机位置)怎样查男朋友手机地方(怎么查对方的手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以和电脑比美怎么查男朋友的定位苹果手机(怎么查定位手机位置)怎么查男朋友的定位苹果手机(怎么查定位手机位置)现在的社会,手机现已成为了万众随身的一种设备,它可以上网和联络朋友,可以作为人们的掌上电脑。现在的手机大多数都是智能化的,可以和电脑