java雍俊海_ch11_线程.ppt

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

线程间的协作关系与线程同步 线程间的协作关系 线程间的制约关系 多个线程为完成同一任务而分工协作, 每个线程独立地执行,需要协作线程间在某些协调点上协调各自工作。 线程间的协作关系与线程同步 发送线程与接收线程(Buffer.java) 下图是发送线程与接收线程通过缓冲区实现数据传递 线程间的协作关系与线程同步 线程同步机制:采用信号量和PV操作(受到信号灯管理交通启发) 背景:线程互斥访问共享变量 设置信号量(多种状态) P操作:测试信号量状态 V操作:改变信号量状态 两个操作互斥执行,不能中断 线程根据信号量状态而执行 状态合适(信号量为true)则线程执行,改变信号量状态(false),唤醒其他线程; 否则等待,直到被唤醒 线程间的协作关系与线程同步 Java的线程通信方法 public final void wait() throws InterruptedException //等待,直到notify/notifyAll唤醒 public final native void wait(long timeout) throws InterruptedException; //等待指定时间 public final native void notify(); //唤醒一个等待线程 public final native void notifyAll(); //唤醒所有等待线程 采用信号量和同步方法使发送线程与接收线程同步运行 BufferLock.java 发送线程与接收线程同步执行流程图 例程说明 isEmpty作为信号量 在互斥的put和get方法中,如果只有wait方法没有notify方法,线程死锁。 本章小结 进程和线程的概念 创建、管理和控制Java线程对象的方法 线程声明周期和状态 设置线程优先级,控制线程调度 并发执行的多线程间存在的各种不同关系 竞争关系,线程互斥解决 协作关系,线程同步解决 * * * 线程 2. 线程的定义和属性 线程(thread)是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。 并发性:可在一个/多个处理器上并行执行 共享性 同一进程的所有线程共享进程的状态和资源 驻留在进程的同一个主存地址空间中 可以访问相同的数据 进程间需要通信和同步互斥机制 线程 动态性 程序在数据集上的一次动态执行过程 创建进程的同时,至少为其创建一个线程 结构性 线程是操作系统的基本调度和分派单位 具有唯一的标识符和线程控制块 线程 线程的状态 线程具有声明周期,线程的5种状态及状态转换 进程有三种状态(就绪、运行、阻塞) 线程 4. 线程的并发性 宏观上看,并发性反映一个时间段中的几个线程都处于运行但未结束的状态。 微观上看,任一时刻只有一个线程运行。并发的实质是多线程多路复用处理器,提高系统资源利用率。 5. 线程调度 当多个线程处于就绪态时,它们排队等待处理器资源。 操作系统决定如何给不同线程分配处理器,这是线程调度的任务。 线程 线程调度原则 线程调度中执行分配处理器的程序称为分派程序(dispatcher) 线程调度采用剥夺方式,剥夺原则包括两种: 高优先级线程剥夺低优先级线程 设定线程可使用处理器的时间,用完后剥夺 就绪态的线程按优先级排队,在此基础上采取“先到先服务”原则 顺序程序设计 顺序程序设计:同一程序/不同程序都按序执行 执行的顺序性。 执行结果的确定性。 计算结果的可再现性。 顺序程序设计的特点 程序编写和调试方便 效率不高 并发程序设计 方法:把程序分成若干可同时执行的程序块,每个程序块和执行所需数据组成一个进程。 目的:发挥硬件并行性,减少CPU和I/O交互等待事件,提高系统效率。 特点: 并发性:多路复用处理器 共享性:可共享变量,线程通过共享就能交换信号 制约性:进程并发执行或协作完成同一任务时,会产生相互制约关系,要加以协调 交互性:由于共享性,一个程序的执行可能影响其他程序的执行结果,需要控制它的交互性。 并发程序设计 Java程序中,进程从main方法开始执行,进程只有一个main线程,称为主线程。 同时,可以在main方法中创建多个线程对象并启动线程对象执行(多线程并发执行)。 Java提供内置多线程机制,java.lang.Thread类提供线程处理功能。 11.2 Java的线程对象 Runnable接口与Thread类 线程对象的生命周期 线程对象的优先级 Runnable接口与Thread类 Thread类用于创建和控制线程,线程对象执行的方法是Runnable接口中的run()方法,

文档评论(0)

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

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

1亿VIP精品文档

相关文档