- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 Java多线程应用 2.1 线程和多线程 2.2 实例1 Java程序的多线程机制 2.3 实例2 Java程序中的多线程实现 2.4 实例3 基于Java语言的多线程同步机制 2.5实例4 用Java语言实现经典的同步—互斥问题 2.1 线程和多线程 线程(thread)是指计算机正在执行的程序中的一个控制流程。线程本身不是完整程序,没有执行的入口,也没有出口,因此其自身不能自动运行,而必须栖身于某一进程之中,由进程触发执行。 Thread类提供了sleep( )、join( )、interrupt( )、currentThread( )、isAlive( )和stop( )等方法,用来控制和协调线程。下面介绍几个常用的方法。 1.sleep( ) sleep( )方法使一个线程暂停运行一段固定的时间。在休眠时间内,线程将停止运行。休眠时间的长短由sleep( )方法的参数决定。 public void run( ) { … //进行其他处理后 Thread.sleep(200); //休眠时间以ms为单位 } 2. join( ) join( )方法使当前正在执行的线程进入等待状态(挂起),直至方法join( )所调用的线程结束。 设已经生成了一个线程zsmthread,而当前正在运行的另一线程中执行了方法outtime( ): public void outtime( ) { … //挂起线程,并运行线程zsmthread zsmthread.join( ); //继续执行本线程其余的语句 … } 这样,在执行方法outtime( )之后,现行的线程被挂起,转向运行线程zsmthread,直到线程zsmthread运行结束,才继续执行本线程剩下的语句。 3. 同步问题 在多线程应用程序中,线程是共享内存及其他资源的,但各个线程对这些数据的访问却是异步的,即当某一个线程访问共享数据时,并不知道其他线程是否也在访问这些数据。因此,有时会出现共享数据不一致的危险。这就是多线程的同步问题。 在Java语言中,解决线程同步的基本思想是:避免多个线程访问同一个对象,方法是为每一个对象的实例做一个标志,这个标志称为“锁定标志”。关键字synchronized提供了操作这个标志的方法,这样,保证在任何时刻只有一个线程在访问共享数据。 2.2 实例1 Java程序的多线程机制 Java程序通过流控制来执行程序流,每个单个的流控制称为一个线程。如果一个程序中可有多个线程同时执行不同的任务,则称为多线程。多线程程序有提高系统的输入/输出速度、有效利用系统资源、改善计算机通信功能等优点。 2.2.1 线程的生命周期 一个线程创建之后,总处于某种状态之中,线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务,在线程的生命周期中有四种状态,通过对线程进行操作来改变其状态。 1.创建状态 创建了一个线程而还没有启动它,则处于创建状态,此时仅是一个空的线程对象,并不获得应有资源,只有启动后,系统才为它分配资源。处于创建状态的线程可以进行两种操作:一是通过调用start()方法启动,使其进入可运行状态;二是调用stop()方法,使其进入消亡状态。 2.可运行状态 在线程的创建状态中进行启动操作,则此线程进入可运行状态。可运行状态只说明该线程具备了运行的条件,但并不一定是运行状态,因为在单处理器系统中运行多线程程序,实际上在每个“时刻”至多有一个线程在运行,而系统中可能有多个线程都处于运行状态,系统通过快速切换和调度使所有可运行的线程共享处理器,造成宏观上的多线程并发运行。在可运行状态,线程运行的是线程体,线程体由run()方法规定,在自己定义的线程类中重写。 在可运行状态下可进行多种操作:调用suspend()方法,使线程挂起,从而进入不可运行状态;调用sleep()方法,使线侱睡眠,从而进入不可运行状态;调用wait()方法,使线程等待,从而进入不可运行状态;调用yield()方法,使线程退让,使线程把CPU控制权提前交给同级优先权的其他线程;调用stop()方法,使线程终止,从而进入消亡状态。正常的情况下是执行完run()方法,使线程结束,进入消亡状态。 3.不可运行状态 不可运行状态从可运行状态转换而来,一个处于可运行状态的线程遇到下列情况进入不可运行状态:调用了suspend()方法; 调用了sleep()方法; 调用了wait()方法; 另外,如果一个线程是和I/O操作有关的,则在执行I/O指令时,由于外设速度远远低于CPU速度而使线程受到阻塞,此时也可进入不可运行状态。 当线程处于不可运行状态时,可通过下面途径恢复到可运行状态:通过sleep()方法进入
文档评论(0)