版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 多线程8.1线程的基本概念什么是线程?线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。2线程(thread)就是进程中的一个执行线索。Java虚拟机允许进程中同时执行多个线程。每个线程都有一个优先级。具有较高优先级的线程先执行。线程是操作系统分配 CPU 时间的基本实体。每一个应用程序至少有一个线程,也可以拥有多个线程。线程是程序中的代码流。多个线程可以同时运行并能共享资源。 线程与进程不同,每个进程都需要操作系统为其分配独立的地址空间,而同一进程中的各个线程是在同一块地址空间中工作。 在 Java 程序中,一些动态效果(如动画的实现、动态的字幕等)常利用多线程技术
2、来实现。3什么是多线程?多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务.48.1.1线程的生命周期线程的生命周期:一个线程从创建到死亡的过程。线程的生命周期可分为五个状态:创建状态 就绪状态运行状态 阻塞状态 死亡状态56线程的生命周期线程的状态转换图: 67线程的生命周期创建状态 当用new操作符创建一个新的线程对象时,该线程处于创建状态。处于创建状态的线程只是一个空的线程对象,系统不为它分配资源此时只能调用start方法启动该线程,调用其它任何方法都会产生线程非法状态异常。78线程的生命周期2. 就绪状态 执行线程的start()方法将为线程分配必须的系统资源,安排其运
3、行,并调用线程体run()方法,这样就使得该线程处于可运行( Runnable )状态。这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。89线程的生命周期3. 运行状态 是某个就绪状态的线程获得CPU资源,正在运行,如果有更高优先级的线程进入就绪状态,则该线程就被迫放弃对CPU的控制进入就绪状态,可使用yield ()方法主动放弃CPU,也可能由于执行结束或执行stop()方法进入死亡状态.910线程的生命周期4.阻塞状态 当发生下列事件时,处于运行状态的线程会转入到阻塞状态。调用了sleep()方法;线程调用wait方法所等待的特定条件的满足 线程输入/输出阻塞
4、 1011线程的生命周期从阻塞状态恢复到就绪状态三种途径:处于睡眠状态的线程在指定的时间过去后 如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待进程条件的改变 如果线程是因为输入/输出阻塞,输入/输出完成 11128.1.2线程的优先级1. 线程的优先级及其设置 设置优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行 一个线程的优先级设置遵从以下原则:线程创建时,子进程继承父进程的优先级线程创建后,可通过调用setPriority()方法改变优先级。线程的优先级是1-10之间的正整数。1 - MIN_PRIORITY,10 M
5、AX_PRIORITY5- NORM_PRIORITY1213线程的优先级 线程的调度策略 线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行线程体中调用了yield()方法,让出了对CPU的占用权线程体中调用了sleep()方法, 使线程进入睡眠状态线程由于I/O操作而受阻塞另一个更高优先级的线程出现。在支持时间片的系统中,该线程的时间片用完。1314线程的生命周期5. 死亡状态当线程的run方法执行结束后,该线程自然死亡。14158.2线程的实现在Java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法。继承Thread类并重载run方法
6、。 通过定义实现Runnable接口的类进而实现run方法。 1516线程的实现继承Thread类并重载run方法。 Thread类:是专门用来创建线程和对线程进行操作的类。Thread中定义了许多方法对线程进行操作。Thread类在缺省情况下run方法是空的。可以通过继承Thread类并重写Thread类的run方法实现用户线程。1617线程的实现继承Thread类并重载run方法。总体结构如下:public class MyThread extends Thread public void run() MyThread t = new MyThread();t. start();1718线
7、程的实现执行Runnable接口的类实现run方法。通过建立一个实现了Runnable接口的对象,并以它作为线程的目标对象来创建一个线程。Runnable接口:定义了一个抽象方法run()。定义如下:public interface java.lang.Runnablepublic abstract void run();1819线程的实现执行Runnable接口的类实现run方法。创建的总体框架如下:class MyRunner implements Runnable public void run() MyRunner r = new MyRunner();Thread t = new T
8、hread( r); 1920线程的实现总结:两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。线程的消亡不能通过调用一个stop()命令。而是让run()方法自然结束。20218.3多线程的互斥为什么要引入互斥机制在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不
9、能再使用那个资源,除非被解锁。2122多线程的互斥2. 怎样实现互斥对于访问某个关键共享资源的所有方法,都必须把它们设为synchronized例如:synchronized void f() /* . */ synchronized void g() /* . */ 如果想保护某些资源不被多个线程同时访问,可以强制通过synchronized方法访问那些资源。调用synchronized方法时,对象就会被锁定。2223多线程的互斥public class MyStack int idx = 0; char data = new char 6; public synchronized void
10、 push( char c) data idx = c; idx+; public synchronized char pop() idx-; return data idx; 2324多线程的互斥说明: 当synchronized方法执行完或发生异常时,会自动释放锁。被synchronized保护的数据应该是私有(private)的。2425多线程的同步怎样实现同步线程间的相互作用:wait and notify2526多线程的同步wait() 和 notify() 方法:两个方法配套使用,wait()使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify()被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。2627多线程的同步怎样实现同步 具有wait()和notify()的线程状态图:2728多线程的同步 除了 notify(),还有一个方法 notifyAll() 也可起到类似作用,唯一的区别在于,调用 notifyAll()方法将把因调用该对象的wait()方法而阻塞的所有线程一次性全部解除阻塞。当然,只有获得锁的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024标准合作生产合同
- 04年云存储服务合同
- 2024施工合同备案表范本
- 04年光伏发电项目开发与建设合同
- 2024年互联网公司提供在线教育服务合同
- 2024年光伏发电项目开发与合作建设合同
- 2024年企业宣传与推广合同
- 2024建设银行外汇的借款合同范本
- 2024古董古玩版权使用许可合同
- 公司营销部门年终工作总结
- 电力工程施工售后保障方案
- 2024年小学心理咨询室管理制度(五篇)
- 第16讲 国家出路的探索与挽救民族危亡的斗争 课件高三统编版(2019)必修中外历史纲要上一轮复习
- 机器学习 课件 第10、11章 人工神经网络、强化学习
- 北京市人民大学附属中学2025届高二生物第一学期期末学业水平测试试题含解析
- 书籍小兵张嘎课件
- 氢气中卤化物、甲酸的测定 离子色谱法-编制说明
- 2024秋期国家开放大学专科《机械制图》一平台在线形考(形成性任务四)试题及答案
- 2024年黑龙江哈尔滨市通河县所属事业单位招聘74人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 私募基金管理人-廉洁从业管理准则
- 房地产估价机构内部管理制度
评论
0/150
提交评论