JAVAPPT教学课件-第九章 多线程.ppt_第1页
JAVAPPT教学课件-第九章 多线程.ppt_第2页
JAVAPPT教学课件-第九章 多线程.ppt_第3页
JAVAPPT教学课件-第九章 多线程.ppt_第4页
JAVAPPT教学课件-第九章 多线程.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

copyright 2008 by neusoft group. all rights reserved java275 多线程 东软it人才实训中心 3 sept. 2008 confidential 课程结构 内容课时课时 (h) 第一章 计计算机系统统概论论 1 第二章 认识认识 java 2 第三章 java虚拟拟机简简介 1 第四章 变变量和运算符 2 第五章 流程控制语语句 2 第六章 数组组 2 第七章 函数0.5 第八章 面向对对象基础础 2.5 第九章 面向对对象高级级特性 10 第十章 异常处处理 2.2 3 sept. 2008 confidential 课程结构(续) 内容课时课时 (h) 第十一章 工具类类 1.8 第十二章 集合 4 第十三章 gui编编程 5 第十四章 文件与流i/o 6 第十五章 多线线程编编程 6 第十六章 网络编络编 程 6 3 sept. 2008 confidential 第十五章 多线程 学时:6学时 教学方法:讲授ppt 上机练习 目标: java线程机制及线程与进程的区别 。java线程模型。java多线程实现的 两种方式:接口和继承。线程的状态 及其生命周期。线程相关类的常用方 法的使用。线程的休眠,中断及优先 级。什么是守护线程。线程的同步, 和并和死锁 3 sept. 2008 confidential threads 学习目标: 认识threads机制 threads的操作和使用 3 sept. 2008 confidential threads 认识threads 什么是进程? 如,当我们用jvm来执行class文件时,电脑会从磁盘中把程序 代码加载到内存中执行,这时我们就把执行中的程序叫做”进程 ”(process)。 什么是threads?进程又和threads有什么不同? java程序运行需启动java虚拟机,虚拟机就是一个进程。程序 运行时,虚拟机启动一个线程,调用程序的main()方法,该线程 称为程序的主线程。其后由主线程启动其它线程。 3 sept. 2008 confidential threads 一个进程包括三个部分来组成: 一个是cpu, 一个是执行的程序代码(code), 一个是程序执行所处理的数据(data)。 code data cpu 3 sept. 2008 confidential threads 注: 每一个进程是独立的,保有自己的cpu,程序代码和数据,就算 用同一份程序代码产生好几个进程,它们之间还是拥有自己的这 三样东西。 这时就可以发现一个问题,就是有些东西好想重复浪费掉了,例 如程序代码,一些共用的常量等,这些东西应该是每个进程共用 的,可是偏偏每个进程都各自有一份,这样不但造成内存的浪费 ,也造成了cpu的负担,所以有了threads机制,它可以达到同 一份程序产生好几个进程的效果,但是不同的threads之间可以 有某种程度的资源共享,所以可以把threads称为轻量级的进程 (lightweight process)。 3 sept. 2008 confidential threads 注: 因为threads有许多优点,所以当初java设计小组就把这样的 机制加进java程序语言中,使得java程序天生就具备有multi- threads(多线程)的能力。 3 sept. 2008 confidential threads 建立threads java程序中负责threads这个功能的是java.lang.thread这个类。 创建thread类对象有两种方式: 第一种: 继承thread类,复写“run”方法; 例:275-14-1 第二种: 不继承thread类,实现runnable接口,然后复写“run”方法。 例:275-14-2 3 sept. 2008 confidential threads 哪种方式更好,实现runnable接口方式: 理由: 1.较符合面向对象设计的精神与架构 2.java类只能单一继承,但能实现多个接口 3.程序的一致性 3 sept. 2008 confidential threads 产生thread对象 thread() 分配新的 thread 对象 例: threads_test01 t1 = new threads_test01(); thread(runnable target) 分配新的 thread 对象 例: thread t2 = new thread(new runnable_test01(); 3 sept. 2008 confidential threads threads架构图 code data cpu runnable_test01类 runnable_test01对象 thread对象 t2 3 sept. 2008 confidential threads threads操作 四种操作threads的基本方法: start, sleep, join, 和yield 3 sept. 2008 confidential threads 启动threads 启动thread对象的方法”start”,功能是通知thread对象可以准备 开始执行run方法中的程序了。 3 sept. 2008 confidential threads threads状态转移图(一) new runnable running 调用start方法,进入等待执行状态 cpu调度 3 sept. 2008 confidential threads 注: 由于系统中同一时刻不止一个thread对象在执行,而且每种操 作系统都有不同的方式,至于什么时候系统会从等待执行的 threads中取出一个来执行,我们无法预测它的实行时间和顺 序。 当系统选定了一个等待执行中的thread对象后,它就会从等待 执行状态进入执行状态,系统挑选的动作我们称之为”cpu调 度“(schedule)。 被挑选到的threads执行一阵子后,就会被系统给换下来回到 等待状态,然后又会在挑选下一个threads执行。 3 sept. 2008 confidential threads 示例:275-14-3 3 sept. 2008 confidential threads 注: 一个thread对象只能调用start方法一次,所以如果对一个已经 启动的thread对象,再次调用start方法,会产生 “illegalthreadstateexception”异常。 main方法本身也是一个threads。 3 sept. 2008 confidential threads 停止threads执行 jdk1.0时提供了一个stop方法来停止线程,但是这个方法会造 成系统进入不安全状态,所以在jdk1.1之后就取消了这个方法 ,虽然目前这个方法还存在,但是我们没有办法使用它。 让一个线程停止,就是当它把run方法中的程序代码执行完后, 就进入”死亡”(dead)状态了。 3 sept. 2008 confidential threads threads状态转移图(二) new dead runnable running 调用start方法run方法执行完毕 cpu调度 3 sept. 2008 confidential threads 如果要让run方法中的程序代码执行不完,那么thread对象就 会不断地执行下去。 例:275-14-4 3 sept. 2008 confidential threads 注: 当一个thread对象进入死亡状态后,就没有任何方法回到其他 状态了,也就是说人死不能复生! 要想让thread对象在重新执行一次,只有唯一的方法,就是重 新再产生一个thread对象。 3 sept. 2008 confidential threads 暂停threads执行 三种方法: 1.sleep方法 2.yield方法 3.join方法 3 sept. 2008 confidential threads 1.sleep方法 sleep就是让thread对象“睡”一下,然后再设定一个闹钟,时 间一到,它又会恢复执行。 static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行 ) 3 sept. 2008 confidential threads threads状态转移图(三) new dead runnable running 调用start方法 run方法执行完毕 cpu调度 blocked pool unblockedblocking event 3 sept. 2008 confidential threads 注: 当一个thread对象睡醒后,不是立刻进入执行状态来执行, 而是进入等待执行状态,在那里等待被系统挑选到,才会被 执行! 因此sleep方法所传入的时间,只是保证这个thread对象“至 少”会停止这么长的时间。 3 sept. 2008 confidential threads 例:275-14-5 3 sept. 2008 confidential threads 2.yield 有另外一个方法也能让thread对象立刻暂时停止运行,并且直 接从执行状态到等待执行状态,这个方法就是”yield”。 3 sept. 2008 confidential threads 例:275-14-6 3 sept. 2008 confidential threads 注: 上例中两个thread执行时间都比较短,可能只花了0.01秒的时 间,cpu还来不及把它们换下来,他们就停止执行了,所以, 如果时间久一点,就不一定会先某个threads执行完,才轮到另 一个threads执行。 3 sept. 2008 confidential threads 3.join 当一个系统中有好几个threads在执行,有时候某个threads甲 需要等待另一个threads乙完成某件事情后,甲才能继续执行 下去,这时甲在乙还没执行完成之前,就必须要做等待的工作 。 要让某个threads等待另一个threads执行完后,它才能继续执 行,这时我们需要用到”join”方法。 3 sept. 2008 confidential threads 例:妈妈煮饭,发现没有米酒,让儿子去买,妈妈只能等待儿子 把米酒买回来才能继续煮饭 例:275-14-7 3 sept. 2008 confidential threads 取得threads信息的相关方法: boolean isalive() 测试线程是否处于活动状态 void setname(string name) 改变线程名称,使之与参数 name 相同 string getname() 返回该线程的名称 static thread currentthread() 返回对当前正在执行的线程对象的引用。 3 sept. 2008 confidential threads int getpriority() 返回线程的优先级。 void setpriority(int newpriority) 更改线程的优先级。 string tostring() 返回该线程的字符串表示形式,包括线程名称、优先级和线程 组。 3 sept. 2008 confidential threads 数据同步处理 不同的threads之间,程序代码可以共用,数据也可以共用, 只有cpu不能共用,每个threads都以为自己拥有自己的cpu 。 程序代码共用没有太大问题,因为程序是写好的就放在那,数 据的共用就有很大的问题! 3 sept. 2008 confidential threads 例:275-14-8 3 sept. 2008 confidential threads synchronized关键字 把一段程序代码给锁起来,用的是synchronized关键字。 语法: synchronized(要取得锁的对象) 要锁定的程序代码 3 sept. 2008 confidential threads 注: 受到synchronized保护的程序代码中,要访问的对象属性必须设 定为private,因为如果不设定为private,那么就可以用不同的方 式来访问它,这样就达不到保护的效果了。 3 sept. 2008 confidential threads synchronized指令还有另外一种用法: 就是把它写在方法的声明上,例如: public synchronized void method() 3 sept. 2008 confidential threads 两种方式的优缺点: 1.写在方法上声明 优点: 用javadoc制作说明文件时,可以知道哪些方法是 synchronized。 缺点: 1.方法中有些程序是不需要保护的,如果该方法执行会花很 长时间,那么其他人就要花较多时间等待锁被归还; 2.只能取得自己对象的锁,有时候程序设计的需求,可能会 需要取得其他对象的锁; 3 sept. 2008 confidential threads 2.只对某个程序段锁定 优点: 可以针对某段程序代码锁定,不需要浪费时间在别的程序代码上 ; 可以取得不同对象的锁; 缺点: 从文件中别人无法得知哪些方法是synchronized的; 3 sept. 2008 confidential threads threads状态转移图(四) new dead runnable running 调用start方法 run方法执行完毕 cpu调度 blocked pool unblockedblocking event lock pool 取得锁 synchronized 3 sept. 2008 confidential threads 例:275-14-9 3 sept. 2008 confidential threads 注: 乱用synchronized可能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论