- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Java程序设计》 数学与计算机学院 顾和明 第9章 Java多线程机制 9.1 Java中的线程 1。程序、进程和线程 程序是一段静态代码,它是应用软件执行蓝本。 进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。 线程是比进程更小的执行单位。一个进程在其执行过程中会产生多个线程,形成多条执行线索,每个线程都有自身的产生、存在和消亡的过程。 每个进程都有一段专用的内存区域,相互独立,线程间可以共享相同的内存单元(包括代码和数据),并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。 操作系统使用分时管理各个进程,按时间片轮流执行每个线程。如果计算机有多个CPU,那么JVM能充分利用这些CPU,使得Java程序在同一时刻能获得多个时间片,这样可以获得真实的多线程并发效果。 每个Java程序都有一个默认的主线程,它执行main方法。main方法可以创建其他的线程,只有等其他的线程均执行结束之后,主线程才结束。 9.1 Java中的线程 2。线程的状态与生命周期 Java使用Thread类及其子类的对象来表示线程,新建的线程在它的一个完整生命周期中通常要经历4个状态。 (1)新建 当一个Thread类或其子类的对象被声明并创建时,新生的线程处于新建状态,拥有相应的内存空间和其他资源。 (2)运行 线程使用start方法通知JVM来管理线程,并等候切换,当JVM将CPU的使用权切换给线程时,类中的run()方法立即执行。 (3)中断 JVM将CPU资源从当前线程切换给其他线程。 线程执行之间执行了sleep( int millsecond)方法。 线程执行之间执行了wait()方法。 线程使用CPU期间了,某个操作进入阻塞状态。 (4)死亡 处于死亡状态的线程不具有继续执行的能力。这时线程释放了对象实体。例9.1 9.1 Java中的线程 3。线程调度与优先级 可能有多个线程排队等候CPU资源。JVM中的线程调度器负责管理线程,调度器把线程优先级分为10个级别,分别用Thread类中的类常量表示。每个线程的优先级都在常数1~10之间,即Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间。如果没有明确设置线程的优先级,每个线程优先级都为常数5,即Thread.NORM_PRIORTY. 线程的优先级可以通过setPriorty(int grade)方法调整。getPriorty方法返回线程的优先级。 有些操作系统只能识别3个级别:1、5、10。 在采用时间片的系统中,每个线程都有机会获得CPU的使用权,以便使用CPU资源执行线程中的操作。当线程使用CPU资源的时间到了,即使线程没有完成自己的全部操作,Java调度器也会中断当前线程的执行,把CPU的使用切换给下一个排队等候的线程,当前线程等待CPU资源的下一次轮回,然后从中断处继续执行。 Java调度器使高优先级的线程能始终运行,同级别的线程轮流运行。 不提倡使用线程的优先级来保证算法的正确执行。要编写正确、跨平台的多线程代码,必须假设线程在任何时刻都有可能被CPU资源使用权。 9.2 Thread类的子类创建线程 在Java中,用Thread类或子类创建线程对象。 在编写Thread类的子类时,需要重写父类的run()方法,其目的是规定线程的具体操作。 例9.2 在这个例子中除了主线程外还有二个线程,这两个线程共享一个对象,两个线程在运行期间将修改这个对象的成员变量。为了使结果尽量不依赖于当前CPU资源的使用情况,应当让线程主动调用sleep方法让出CPU的使用权进入中断状态。sleep方法是Thread类的静态方法,线程在占用CPU期间,通过调用sleep方法来使自己放弃CPU资源,休眠一段时间。 9.3 使用Runnable接口 使用Thread子类创建线程的优点是:可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某程功能。但是由于不支持多重继承,不能再扩展其他的类。 创建线程的另一个途径是用Thread类直接创建线程对象。使用Thread创建线程对象时,通常使用的构造方法是: Thread(Runnable target) Runnable接口只有一个run()方法,由该方法给Thread类提供run()方法。 参数是一个实现Runnable接口的实例。实例对象称作线程的目标对象。当线程调用start()方法后,一旦轮到它来享
原创力文档


文档评论(0)