第10章 多线程编程.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 多线程编程 主讲:朱会东 E-Mail:zhd168@163.com 第10章 多线程编程 在前面的学习过程中,我们开发的程序主要是单线程,但在实际应用中,程序的逻辑结构往往比较复杂,而且需要同时处理多个任务。 例如,服务器程序要同时处理多个客户机的连接,一个下载程序同时下载多个文件。采用多线程编程可以解决此类问题。多线程编程模型是目前计算机系统架构的最重要的模型。 10.1.1 线程基本概念 (1)程序:是一段静态的代码,是人们解决问题的思维方式在计算机中的描述。 (2)进程:是程序的动态执行过程。 操作系统为每个进程分配一段内存空间,包括:代码、数据以及堆栈等资源 多任务的操作系统(OS)中,进程切换对CPU资源消耗较大 10.1.1 线程基本概念 (3)线程是进程中的执行单元,多线程是一个进程中包含的多个同时运行的执行路径。 线程是比进程更小一级的执行单元 线程不能独立存在,必须存在于进程中,各线程间共享进程空间的数据 线程创建、销毁和切换的负荷远小于进程,又称为轻量级进程(lightweight process)。 10.1.1 线程基本概念 线程与进程 线程在形式上同进程十分相似—都是用一个顺序执行的语句序列来完成特定的功能 不同之处: 线程没有入口,也没有出口,因此其自身不能自动运行,而必须栖身于某一进程之中,由进程触发执行 在系统资源的使用上,属于同一进程的所有线程共享该进程的系统资源,但是线程之间切换的速度比进程切换要快得多 多线程的优势 多线程编程简单,效率高。使用多线程可以在线程间直接共享数据和资源,而多进程之间不能做到这一点。 适合于开发服务程序 如Web服务、聊天服务等 适合于开发有多种交互接口的程序 如聊天程序的客户端、网络下载工具 适合于有人机交互又有计算量的程序 如字处理程序Word、Excel等 10.1.2 线程的运行机制 JVM(JAVA虚拟机)的很多任务都依赖线程调度,执行程序代码的任务是由线程来完成的。 JVM进程被启动,在同一个JVM进程中,有且只有一个进程,就是它自己。然后在这个JVM环境中,所有程序的运行都是以线程来运行。JVM最先会产生一个主线程,由它来运行指定程序的入口点。在这个程序中,就是主线程从main方法开始运行。当main方法结束后,主线程运行完成。JVM进程也随之退出。 10.1.2 线程的运行机制 10.2 线程的创建和启动 10.2.1 线程的创建 Java的线程是通过java.lang.Thread类来实现的。 当我们生成一个Thread类或者它的子类的对象后,一个新的线程就诞生了。 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。 1. 继承 Thread 类 Thread 类 Thread类是一个专门用来创建线程和对线程进行操作的类。Java在Thread类中定义了许多方法,帮助我们运用和处理线程。这些方法可分为四组: (1) 构造方法。用于创建用户的线程对象。 (2) run( )方法。用于定义用户线程所要执行的的操作。 (3) 改变线程状态的方法。如start( )、sleep( )、stop( )、suspend( )、resume( )、yield( )和wait( )方法等。这是最常用的一组方法。 (4) 其他方法。如setPriority( )、setName( )等。 1. 继承 Thread 类 创建Thread类的子类,用自己定义的run( )方法去覆盖Thread类的run( )方法,即将自己要执行的程序区块写入run( )方法中。 Thread类的重要方法:run( ) 定义线程的具体操作 系统调度此线程时自动执行? 初始时无具体操作内容 1. 继承 Thread 类 从Thread类派生出一个子类,在类中一定要实现run() 然后用该类创建一个对象 用start()方法启动线程 通过继承类Thread构造线程 class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i 10; i++) { System.out.println(i + +getName()); try { sleep((int)(Math.random() * 1000));

文档评论(0)

白领文档(原创) + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档