lecture14-java_thread.ppt

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

第14章 Java Thread 辛国栋 xinguodong@163.com 研究院529,座机电话号码 本章内容 了解进程和线程的区别 掌握java多线程的两种实现方式及区别 了解线程的状态变化 了解线程的主要操作方法 了解同步死锁的概念 了解线程的生命周期 程序与进程 程序是一段静态代码 进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的整个过程。 用类比的方式: 程序相当于一段乐谱。 进程相当于该乐谱在乐器上的演奏。 进程和线程的概念 进程一般是对操作系统而言的。 例如,你打开word编辑文档,同时打开outlook收取邮件。我们可以说这时系统内有两个进程在运行。即多个程序几乎在同一时间执行多个任务。 线程一般是对某一程序而言的。 如上例,你打开outlook收新邮件的同时,还可以看已下载的邮件,这两件事没有相互干扰,那么我们说此时这一程序中至少有两个线程在运行。即每一个程序在同一时间内执行多个任务。 进程和线程的概念 进程和线程的概念 从逻辑的观点来看,多线程意味着一个程序的多行语句同时执行,但是多线程并不等于多次启动一个程序,操作系统也不会把每个线程当作独立的进程来对待。 进程和线程的区别 两者的粒度不同,是两个不同层次上的概念。进程是由操作系统来管理的,而线程则是在一个程序(进程)内。 不同进程的代码、内部数据和状态都是完全独立的,而一个程序内的多线程是共享同一块内存空间和同一组系统资源,有可能互相影响。 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 多线程的优势 减轻编写交互频繁、涉及面多的程序的困难(如监听网络端口)。 程序的吞吐量会得到改善(同时监听多种设备,如网络端口、串口、并口以及其他外设)。 有多个处理器的系统,可以并发运行不同的线程(否则,任何时刻只有一个线程在运行)。 线程的调度 CPU按分配的时间片,轮流执行各线程,由于每个线程执行时间极短(20ms),等效各线程并行运行。 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。 多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题 Java多线程 主线程 在任何Java程序启动时,一个线程立刻运行(即main方法对应的线程),该线程通常称为程序的主线程。 主线程的特点: 它是产生其他子线程的线程。 它不一定是最后完成执行的线程,子线程可能在它结束之后还在运行。 线程体 每个线程都是通过某个特定Thread对象所对应的方法run 来完成其操作的,方法run 称为线程体(即线程的可执行代码) java中线程的实现 在Java中如果要想进行多线程代码的实现有两种方式: 继承Thread类 实现Runnable接口 继承Thread类 Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类中,必须明确的覆写Thread类中的run 方法,此方法为线程的主题。 多线程的定义语法: 继承Thread类实现多线程 class MyThread extends Thread // 继承Thread类,作为线程的实现类 private String name ; // 表示线程的名称 public MyThread String name name ; // 通过构造方法配置name属性 public void run // 覆写run 方法,作为线程 的操作主体 for int i 0;i 10;i++ System.out.println name + 运行,i + i ; public class ThreadDemo01 public static void main String args[] MyThread mt1 new MyThread 线程A ; // 实例化对象 MyThread mt2 new MyThread 线程B ; // 实例化对象 mt1.run ; // 调用线程主体 mt2.run ; // 调用线程主体 继承Thread类实现多线程 发现ThreadDemo01先执行mt1对象之后再执行mt2对象,并没有交错运行 说明此时并没有启动线程 要想启动线程,是不能直接调用run 方法,而应该是调用从Thread

文档评论(0)

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

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

1亿VIP精品文档

相关文档