面向对象程序设计第10章.ppt

上传人:xian****812 文档编号:6570798 上传时间:2020-02-29 格式:PPT 页数:20 大小:212.50KB
返回 下载 相关 举报
面向对象程序设计第10章.ppt_第1页
第1页 / 共20页
面向对象程序设计第10章.ppt_第2页
第2页 / 共20页
面向对象程序设计第10章.ppt_第3页
第3页 / 共20页
点击查看更多>>
资源描述
第10章 多线程程序设计 线程的定义 进程是一个用来描述处于动态运行状态的应用程序的概念 即一个进程就是一个执行中的程序 每个进程都有一块自己独立的地址空间 并可以包含多个线程 这些线程将共享进程的地址空间及操作系统分配给这个进程的资源 线程是指进程中的一个执行流 多线程是指在一个进程中同时运行多个不同线程 每个线程分别执行不同的任务 10 1创建线程 创建线程的两种方法 利用Thread类创建线程利用Runnable接口创建线程 1 利用Thread类创建线程 使用这种方式创建 启动线程的基本过程 声明一个Thread类的子类 并且覆盖其中的run 成员方法 并将线程执行的程序代码写在其中 使用时通过调用Thread类提供的start 方法间接地使用它 例 利用Thread类创建线程 publicclassMyThread 1extendsThread publicvoidrun publicclassMultiThread 1 publicstaticvoidmain Stringargs Threadt1 newMyThread 1 t1 setName T1 Threadt2 newMyThread 1 t2 setName T2 t1 start t2 start 2 利用Runnable接口创建线程 使用这种方式创建 启动线程的基本过程 声明一个实现Runnable接口的类 以实现Runnable接口的类对象为参数创建一个Thread类对象 调用Thread类对象的start 方法启动线程 例 利用Runnable接口创建线程 publicclassMyThread 2implementsRunnable publicvoidrun publicclassMultiThread 2 publicstaticvoidmain Stringargs MyThread 2thread newMyThread 2 ThreadthreadObj newThread thread threadObj start 10 2线程状态的转换 一个线程的生命周期中 有四个状态 线程就是在这4个状态之间不断变换 直到死亡为止 线程的优先级 每一个线程都有一个优先级 在Thread类中有3个常量MIN PRIORITY MAX PRIORITY NORMAL PRIORITY分别表示优先级为1 10和5 它们代表最低优先级 最高优先级和普通优先级 可以调用Thread类的setPriority intlevel 成员方法为某个线程设置优先级 例如 假设threadObj是一个Thread类对象 可以用threadObj setPriority 6 设置优先级 10 3线程控制 基本的线程控制方法启动线程start 阻塞线程wait 唤醒线程notify 或notifyAll 或interrupt 线程让步yield 等待其它线程结束join 判断线程是否处于活动状态isAlive 10 4多线程的同步与互斥 一般来说线程之间不是孤立的 多个线程可能共享某些资源 比如 一个线程要读取数据 另外一个线程要处理这些数据 因此 系统必须对线程进行同步控制 等到第一个线程读取完数据 第二个线程才能处理该数据 从而避免错误 简单地说 在一个时刻只能够被一个线程访问的资源称为临界资源 而访问临界资源的那段代码则被称为临界区 临界区的使用必须互斥地进行 即一个线程在临界区中执行代码时 其它线程不能够进入临界区 synchronized Java中 引入了对象 互斥锁 的概念 来保证共享数据操作的完整性 每个Java对象都对应于一个 互斥锁 标记 这个标记用来保证在任一时刻 只能有一个线程访问该对象 一旦某个线程获得了该锁 别的线程如果希望获得该锁 只能等待这个线程释放锁之后 关键字synchronized用来与对象的互斥锁联系 当某个对象用synchronized修饰时 表明该对象在任一时刻只能由一个线程访问 此时 如果有第二个线程也要访问同一个对象 它也试图获取该对象的互斥锁 但因该对象已经被锁定 则第二个线程必须等待 直到锁被释放为止 synchronized 1 synchonized方法synchronized 或 synchronized this synchronized 2 synchronized块将synchronized关键字加在某代码块之前 就可声明该代码块为synchronized块 从而使该代码块成为互斥使用的代码块 即其中的代码必须获得对象的锁方能执行 synchronized 例 模拟银行中的存款 取款 1 publicclassAccount privateStringname privatefloatamount publicsynchronizedvoiddeposit floatamt floattmp amount tmp amt try Thread sleep 1 catch InterruptedExceptione amount tmp publicfloatgetBalance returnamount 例 模拟银行中的存款 取款 2 publicsynchronizedfloatwithdraw floatamt floattmp amount if tmp amt tmp amt else tmp 0 System out println 预取 amt 剩余金额不足 仅能取走 amount try Thread sleep 1 catch InterruptedExceptione amount tmp returnamount 例 模拟银行中的存款 取款 3 publicclassDepositThreadextendsThread 存款线程 privateAccounta1 privatefloatamount publicDepositThread Accounta1 floatamount this a1 a1 this amount amount 例 模拟银行中的存款 取款 4 publicvoidrun synchronized a1 floatk a1 getBalance try sleep 1 模拟花费时间 catch InterruptedExceptione a1 deposit amount System out println 现有 k 存入 amount 余额 a1 getBalance 例 模拟银行中的存款 取款 5 publicclassWithdrawThreadextendsThread 取款线程 privateAccounta1 privatefloatamount publicWithdrawThread Accounta1 floatamount this a1 a1 this amount amount publicvoidrun synchronized a1 floatk a1 getBalance try sleep 1 模拟花费时间 catch InterruptedExceptione floatm a1 withdraw amount 例 模拟银行中的存款 取款 6 publicclassAccountTest publicstaticvoidmain String args Accounta1 newAccount newDepositThread a1 500 start newDepositThread a1 200 start newWithdrawThread a1 150 start
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!