




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 Java多线程机制 2 讲课提纲 1 1Java中的线程1 2Thread的子类创建线程1 3使用Runable接口1 4线程的常用方法 3 引言 Java语言的一大特性点就是内置对多线程的支持 多线程是指同时存在几个执行体 按几条不同的执行线索共同工作的情况 Java虚拟机负责管理线程 多个线程将被轮流执行 使得每个线程都有机会使用CPU资源 观察代码 classA publicstaticvoidmain Stringargs while true System out println hello while true System out println hello 4 图1 1JVM让线程轮流执行 线程1 线程2 线程3 JVM 5 1 1Java中的线程 程序是一段静态的代码 它是应用软件执行的蓝本 进程是程序的一次动态执行过程 它对应了从代码加载 执行至执行完毕的一个完整过程 这个过程也是进程本身从产生 发展至消亡的过程 线程是比进程更小的执行单位 一个进程在其执行过程中 可以产生多个线程 形成多条执行线索 每条线索 即每个线程也有它自身的产生 存在和消亡的过程 也是一个动态的概念 6 图1 2在主线程和其他线程之间轮流交换 应用程序 主线程 线程 线程 JAVA虚拟机 JVM 7 2 线程的状态与生命周期 Java语言使用Thread类及其子类的对象来表示线程 新建的线程在它的一个完整的生命周期中通常要经历如下的四种状态 1 新建 2 运行 3 中断 4 死亡 8 例1 1 PublicclassExample9 1 publicstaticvoidmain Stringargs Leftandleft Righthandright left newLefthand 创建线程right newRighthand left start right start for inti 1 i 6 i System out println 我是主线程 9 classLefthandextendsThread publicvoidrun for inti 1 i 9 i System out println 我是左手线程 ClassRighthandextendsThread publicvpidrun for inti 1 i 9 i System out println 我是右手线程 10 3 线程调度与优先级 JMV中的线程调度器负责管理线程 调度器把线程的优先级分为10个级别 分别用Thread类中的类常量表示 每个Java线程的优先级都在常数1 10之间 即Thread MIN PRIORITY和Thread MAX PRIORITY之间 setPriority intgrade 用于调整线程的优先级 getPriority 返回线程的优先级 Java调度器的任务是使高优先级的线程能始终运行 一旦时间片有空 则使具有同等优先级的线程以轮流的方式顺序使用时间片 11 1 2Thread的子类创建线程 Java中编程实现多线程应用有两种途径 一种是用Thread类的子类创建线程 另一种是用Thread类创建线程 12 用Thread类的子类创建线程对象 编写Thread类的子类时 需要重写父类的run方法 其目的是规定线程的具体操作 否则线程就什么也不做 因为父类的run方法中没有任何操作语句 当JVM将CPU使用权切换给线程时 如果线程是Thread的子类创建的 该类中的run方法就立刻执行 13 1 3使用Runable接口1 Runable接口与目标对象 创建线程的另一个途径就是用Thread类直接创建线程对象 使用Thread创建线程对象时 通常使用的构造方法是 Thread Runnabletarget 14 例1 2 ClassExample9 4 publicstaticvoidmain Stringargs ThreadthreadA threadB threadC threadD Target0bjecta1 newTarget0bject 线程的目标对象a2 newTarget0bject threadA newThread a1 目标对象是a1的线程threadB newThread a2 a1 setNnmber 10 threadAsetName add threadBsetName add threadC newThread a2 threadD newThread a2 a2 stenumber 10 threadC setname sub threadD setname sub 15 threadA start threadB start threadC start threadD start ClassTarget0bjectimplementsRunnable privateintnumber 0 publicvoidsetNumber intn number n Publicvoidrun while true if Thread currentThread getName equals add number System out println 现在number等于 number 16 if Thread currentThread gatName Equals sub number System out println 现在number等于 number try Thread sleep 1000 catch InterruptedExceptione 17 2 关于run 方法中的局部变量 对于具有相同目标对象的线程 当其中一个线程享用CPU资源时 目标对象自动调用接口中的run 方法 这时 run 方法中的局部变量被分配内存空间 当轮到另一个线程享用CPU资源时 目标对象会再次调用接口中的run 方法 18 那么run 方法中的局部变量会再次分配内存空间 也就是说 已经启动运行了两次 分别运行在不同的线程中 不同线程的方法中的局部变量互不干扰 一个线程改变了自己的方法中局部变量的值不会影响其他线程的方法中的局部变量的值 19 3 在线程中启动其他线程 线程通过调用start 方法将启动该线程 使之从新建状态进入就绪队列排队 一旦轮到它来享用CPU资源时 就可以脱离创建它的主线程独立开始自己的生命周期了 在前面的例子中 都是在主线程中启动其他线程 实际上也可以在任何一个线程中启动另外一个线程 20 1 4线程的常用方法 1 start 线程调用该方法将启动线程 使之从新建状态进入就绪队列排队 一旦轮到它来享用CPU资源时 就可以脱离创建它的线程独立开始自己的生命周期了 21 2 run Thread类的run 方法与Runnable接口中的run 方法的功能和作用相同 都用来定义线程对象被调度之后所执行的操作 都是系统自动调用而用户程序不得引用的方法 系统的Thread类中 run 方法没有具体内容 所以用户程序需要创建自己的Thread类的子类 并重写run 方法来覆盖原来的run 方法 当run 方法执行完毕 线程就变成死亡状态 在线程没有结束run 方法之前 不赞成让线程再调用start 方法 否则会发生IllegalThreadStateException异常 22 3 sleep intmillsecond 线程占有CPU期间 执行sleep方法来使自己放弃CPU资源 休眠一段时间 休眠时间的长短由sleep方法的参数决定 millsecond是毫秒为单位的休眠时间 如果线程在休眠时被打断 JVM就抛出InterruptedException异常 因此 必须在try catch语句块中调用sleep方法 23 4 isAlive 线程处于 新建 状态时 线程调用isAlive 方法返回false 当一个线程调用start 方法 并占有CUP资源后 该线程的run 方法就开始运行 在线程的run 方法结束之前 即没有进入死亡状态之前 线程调用isAlive 方法返回true 当线程进入 死亡 状态后 实体内存被释放 线程仍可以调用方法isAlive 这时返回的值是false 24 例1 3Importjava util PublicclassExample9 8 publicstaticvoidmain Stringargs Aa newA a thread start ClassAimplementaRunnable Threadthread intn 0 A thread newThread this Publicvoidrun while true 25 System out println newDate n try Thread s eep 1000 catch InterruptedExceptione if n 3 thread newThread this thread start if n 12 return 26 5 currentThread currentThread 方法是Thread类中的类方法 可以用类名调用 该方法返回当前正在使用CPU资源的线程 27 6 interrupt intertupt 方法经常用来 吵醒 休眠的线程 当一些线程调用sleep方法处于休眠状态时 一个占有CP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大专四级考试试题题库及答案
- 2025年庐山计算机考试试题及答案
- 2025(建筑行业资料)某地产集团甲供材料合同模板
- 2025电子产品销售合同参考模板
- Anteisopentadecanoyl-CoA-Anteisopentadecanoyl-coenzyme-A-生命科学试剂-MCE
- 2025年古代微积分考试题及答案
- 全国清华版信息技术小学二年级下册新授课 第6课 写字也输入-手写输入法 教学设计
- 2025店面租赁合同范本标准版 租赁店面合同范本
- 2025年股权合作协议范本参考
- 风山驾校驾考知识培训课件
- 乡镇综合行政执法队队长试用期满转正工作总结
- 2025天津医科大学眼科医院第三批招聘1人备考考试试题及答案解析
- 2025年法院书记员招聘考试笔试试题含答案
- 教科版四年级上册科学全册教案
- 水稻螟虫绿色防控
- 2024版2025秋新版小学道德与法治三年级上册全册教案教学设计含反思
- 家电合伙合同(标准版)
- CPK、PPK和SPC(X-R控制图)模板
- 2025年二级建造师考试施工管理真题及答案
- 光伏发电运行维护定期巡视检查项目和周期
- 特种设备(锅炉、压力容器)培训考试试题及答案
评论
0/150
提交评论