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

Java语言程序设计(第三版-清华).ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 线程 目录 Java中的线程 线程的生命周期 Thread的子类创建线程 使用Runable接口 线程的常用方法 线程的优先级 线程同步 在同步方法中使用wait()、notify 和notifyAll()方法 挂起、恢复和终止线程 本章小结 线程的概念 进程和线程的区别(Example9_11) 进程 一个独立程序的每一次运行称为一个进程,例如 用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 设置一个进程要占用相当一部分处理器时间和内存资源 大多数操作系统不允许进程访问其他进程的内存空间,进程间的通信很不方便,编程模型比较复杂 线程的概念(续) 线程 一个程序中多段代码同时并发执行,称为多线程 通过多线程,一个进程表面上看同时可以执行一个以上的任务——并发 创建线程比创建进程开销要小得多,线程之间的协作和数据交换也比较容易(进程独站资源) 线程间共享资源(内存、代码、数据)有利于并行处理 线程的状态与生命周期 新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源。 就绪状态:线程等待 CPU 运行状态:start()方法开始执行 中断(阻塞)状态:sleep(), wait(), I/O 完成 or 发布 I/O 请求 sleep(): 使当前线程进入等待状态,参数设定其等待时间 wait(): 使当前线程进入等待状态,调用nofify(), or notifyAll(), 使其重新进入线程等待队列 死亡: run() 方法完成 stop() 方法被调用 线程的几种基本状态(续) 诞生状态 线程刚刚被创建 就绪状态 线程的 start 方法已被执行 线程已准备好运行 运行状态 处理机分配给了线程,线程正在运行 阻塞状态(Blocked) 在线程发出输入/输出请求且必须等待其返回 遇到用synchronized标记的方法而未获得其监视器暂时不能进入执行时 休眠状态(Sleeping) 执行sleep方法而进入休眠 死亡状态 线程已完成或退出 主线程:Java应用程序总是从主类的main方法开始执行。当JVM加载代码,发现main方法之后,启动的线程称作“主线程”,该线程负责执行main方法。 在main方法的执行中再创建的线程,就称为程序中的其它线程。 如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句,JVM就会结束Java应用程序。 如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,main方法即使执行完最后的语句,JVM也不会结束程序,JVM一直要等到程序中的所有线程都结束之后,才结束Java应用程序。 Java中创建线程的两种方法 Thread 类的子类创建线程对象,子类重写Thread类中的run()方法 使用Thread类直接创建线程对象,但需要使用Runable接口 Thread类 Thread类 在Java程序中创建多线程的方法之一是继承Thread类 封装了Java程序中一个线程对象需要拥有的属性和方法 从Thread类派生一个子类,并创建这个子类的对象,就可以产生一个新的线程。这个子类应该重写Thread类的run()方法,在run方法中写入需要在新线程中执行的语句段。这个子类的对象需要调用start方法来启动,新线程将自动进入run方法。原线程将同时继续往下执行 它位于java.lang包中,因而程序开头不用import任何包就可直接使用 例子:Example9_1.java Thread类(续) 在新线程中完成计算某个整数的阶乘 public class Ex8_1 { public static void main( String [] args ) { System.out.println(main thread starts); FactorialThread thread=new FactorialThread(10); thread.start(); System.out.println(main thread ends ); } } class FactorialThread extends Thread { private int num; public FactorialThread( int num ) { this.num=num; } Thread类(续) public void run() { int i=num;

文档评论(0)

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

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

1亿VIP精品文档

相关文档