网站大量收购独家精品文档,联系QQ:2885784924

新Java语言程序设计 教学课件 辛运帏 饶一梅 第十一章.ppt

新Java语言程序设计 教学课件 辛运帏 饶一梅 第十一章.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 线程 线程和多线程 当前大多数操作系统都提供了线程调度,多线程是多任务操作的实现方式之一,从占用系统资源角度来看,可以说它是最好的实现方式。 Java语言里,线程表现为线程类,线程类封装了所有需要的线程操作控制。线程类是控制线程行为的惟一的手段。 线程的概念 程序是一段静态的代码,它是应用程序执行的脚本。程序的每一次执行对应一个进程,这是系统进行资源分配和调度的一个独立单位。 线程是进程执行过程中产生的多条执行线索,是比进程单位更小的执行单位,在形式上同进程十分相似——都是用一个顺序执行的语句序列来完成特定的功能。 不同的是,线程没有入口,也没有出口,因此其自身不能自动运行,而必须栖身于某一进程之中,由进程触发执行。 在系统资源的使用上,属于同一进程的所有线程共享该进程的系统资源,而且线程之间切换的速度比进程切换要快得多。 线程可以看作是轻量级的进程。 多线程 多线程是提高计算机利用率的有效手段,为了达到多线程的效果,Java语言把线程或执行环境(execution context)当作一个封装对象,包含CPU及自己的程序代码和数据,由虚拟机提供控制。 Java类库中的类java.lang.Thread可以实现多线程,它允许创建线程,并可控制所创建的线程。 对多线程的综合支持是Java语言的一个重要特色。 线程的结构 Java中的线程包括三部分 虚拟CPU 执行的代码 处理的数据。 这三方面是各自独立的。 一个线程所执行的代码与其他线程可以相同也可以不同,一个线程访问的数据与其他线程可以相同也可以不同。虚拟CPU封装在java.lang.Thread类中,它控制着整个线程的运行,并处理传递给这个类的数据。 线程的状态 线程一共有四种状态:新建(new)、就绪状态(runnable)、死亡(dead)及阻塞(blocked)。这四个状态及对应的转换关系如图所示。 线程的状态 刚刚创建的线程处于新建状态。 新创建的线程已有了相应的内存空间以及其它资源,但处于不可运行状态。 创建线程的语句如下: Thread thread = new Thread(“test”) 创建线程后,必须调用start()方法来启动线程,这样线程进入就绪状态,排在就绪队列中。 就绪队列中的线程都在等待CPU,只要CPU一空闲,系统会从就绪队列中挑选一个马上运行。 线程的状态 线程执行完毕,或是在运行中调用了Runtime类的exit()方法,都可以导致线程死亡。此时意味着线程的终结。 一个正在执行的线程因特殊原因被暂停执行,就进入阻塞状态。 引起阻塞的原因很多,如sleep()和wait()是两个常用的引起阻塞的方法。阻塞时线程不能进入就绪队列排队,必须等到引起阻塞的原因消除,才可重新进入就绪队列。 在程序中常常调用interrupt()来中断线程。interrupt()不仅可中断正在运行的线程,而且也能中断处于阻塞状态的线程. 创建线程 创建线程有两种方法 一是继承Thread类,并重写类中的run()方法; 二是实现Runnable接口。 一般地,第二种方法更常用一些。 线程所执行的代码都放到run()方法中,当一个线程被创建后,Java运行时环境就会自动调用run()方法,这个方法称为线程体。 继承Thread类 java.lang.Thread是Java中用来表示进程的类,可以定义它的一个子类,创建这个子类的实例就表示创建了一个线程,同时重写Thread类中的run()方法。 用Thread类的子类创建线程的过程包括以下三步 1) 从Thread类派生一个子类,在类中一定要实现run(); 2) 用该类创建一个对象; 3) 用start()方法启动线程。 继承Thread类示例 例11-1 class Lefthand extends Thread { //派生子类 public void run(){ …… //相应的处理代码 } } Lefthand left = new Lefthand(); //创建实例 left.start(); //启动线程 继承Thread类示例 将上述三步用在一个程序中,见例11-2。 public class myThread extends Thread{ public void run(){ while(running){ …… // 执行若干操作 sleep(100); } } public static void main(String args[]){ Thread

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档