Java高级编程-线程.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java高级编程-线程

第9章 线程 ;图 8.2-1; 实现多任务通常有两种方法,一种称为抢占式多任务(preemptive multitasking);一种叫合作式多任务(cooperative multitasking)。对于抢占式多任务,操作系统自行决定何时中断一个程序,将执行时间分给其他程序。相反,对于合作式多任务操作系统将与程序进行协商,只有程序自愿放弃控制时才被中断。虽然抢占式多任务实现起来困难一些,但却有效得多。对于合作式多任务来说,一个运行不好的程序会占有整个系统。 ; 多线程把操作系统的多任务原理应用到程序中,进一步发展了这一原理。应用了多线程技术的程序如同多任务操作系统一样,可以同时执行多个任务。每个任务被称为一个线程——它是线程控制流的简称。实际上,多线程的应用非常广泛,例如,浏览器在下载数据的同时还可以浏览其他网页,或者当某个网页下载太慢时,还可以控制浏览器中止这个网页浏览。Java语言本身也使用一个线程在后台收集无用的内存单元——这样就减少了用户管理内存的麻烦!; 通常,我们把操作系统的多个任务称为进程(Process),而程序中的多任务则称为线程。那么,线程和进程之间有什么区别呢?最基本的区别就是每个进程都拥有一组完整的属于自己的变量,而线程则共享这些数据。看起来这样似乎不如进程安全,确实如此,本章后面将会更详细地讨论。但线程的优势在于创建和注销线程的开销比运行新的进程少得多,所以现在主流的操作系统都支持多线程。而且,和进程间的通信相比,线程间的通信要快得多,也方便得多。 ;多线程基本概念;多线程基本概念;多线程基本概念;线程的创建与控制;继承Thread;public class ThreadTest { public static void main(String args[]) { Xyz r = new Xyz(); Thread t = new Thread(r); t.start(); } } class Xyz implements Runnable { int i; public void run() { while (true) { System.out.println(Hello + i++); if (i == 50) break; } } };线程的创建与控制;线程的创建与控制;线程的创建与控制;线程的状态 线程有四种状态,分别为 ● new(初始态):一个线程在调用new()方法之后,调用start()方法之前所处的状态。在初始态中,可以调用start()和stop()方法。 ; ● Runnable(可运行状态):一旦线程调用了start()方法,线程就转到Runnable()状态。注意,如果线程处于Runnable状态,它也有可能不在运行,这是因为还存在优先级和调度问题。 ● blocked(阻塞/挂起状态):线程处于阻塞状态。这是由两种可能性造成的:因挂起而暂停;由于某些原因而阻塞,例如等待IO请求的完成等。 ● dead(终止状态):线程转到退出状态。这有两种可能性:run()方法执行结束;调用了stop()方法。; 一个Thread对象在它的生命周期中会处于各种不同的状态。图8.2-2形象地说明了这点。 尽管线程变为可运行的,但它并不立即开始运行。在一个只带有一个处理机的机器上,某一个时刻只能进行一个动作。在Java中,线程是抢占式的,但并不一定是分时的 (一个常见的概念错误是认为“抢占式”只不过是“分时”的一种别称而已)。抢占式调度模型是指可能有多个线程是可运行的,但只有一个线程在实际运行。 ; 这个线程会一直运行,直至它不再是可运行的,或者另一个具有更高优先级的线程成为可运行的。对于后面一种情形,则是因低优先级线程被高优先级线程抢占了运行的机会。 ? 一个线程可能因为各种原因而不再是可运行的:线程的代码可能执行了一个Thread.sleep()调用,要求这个线程暂停一段固定的时间;这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个线程无法继续运行。 ;图 8.2-2 ; 所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时间(被运行)。

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档