- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java实训《06-多线程》.ppt
智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 多线程 讲师:刘德伏 多线程 Thread 进程 Process:正在执行中的程序 线程(例:迅雷):在同一时间只能有一个进程或进程中的线程在执行(TDM) 多线程存在的意义。 线程的创建方式 多线程的特性 创建线程方式一 继承Thread类 子类覆盖父类中的run方法,将线程运行的代码存放在run中。 建立子类对象的同时线程也被创建。 通过调用start方法开启线程。 例程 线程的四种状态 被创建 运行 冻结 消亡 start() stop() wait() sleep() notify() sleep() stop() run()结束 sleep方法需要指定睡眠时间,单位是毫秒。 一个特殊的状态:就绪。具备了执行资格,但是还没有获取资源。 创建线程方式二 实现Runnable接口 子类覆盖接口中的run方法。 通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread类的构造函数。 Thread类对象调用start方法开启线程。 思考:为什么要给Thread类的构造函数传递Runnable的子类对象? 线程安全问题 导致安全问题的出现的原因: 多个线程访问出现延迟。 线程随机性 。 注:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的。 同步(synchronized) 格式: synchronized(对象) { 需要同步的代码; } 同步可以解决安全问题的根本原因就在那个对象上。 该对象如同锁的功能。 同步的特点 同步的前提: 同步需要两个或者两个以上的线程。 多个线程使用的是同一个锁。 未满足这两个条件,不能称其为同步。 同步的弊端: 当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。 同步函数 格式: 在函数上加上synchronized修饰符即可。 思考:同步函数用的是哪个锁呢? 同步成员函数:this 同步静态函数:类名.class 程序验证。 线程的死锁 请写出一个死锁程序:Download 线程间通信 例程。 资源 Input Output 思考1:wait(),notify(),notifyAll(),用来操作线程为什么定义在了Object类中? 1,这些方法存在与同步中。 2,使用这些方法时必须要标识所属的同步的锁。 3,锁可以是任意对象,所以任意对象调用的方法一定定义Object类中。 思考2:wait(),sleep()有什么区别? wait():释放cpu执行权,释放锁。 sleep():释放cpu执行权,不释放锁。 停止线程 定义循环结束标记 因为线程运行代码一般都是循环,只要控制了循环即可。 使用interrupt(中断)方法。wait/notify 该方法是结束线程的冻结(wait()/sleep())状态,使线程回到运行状态中来, 抛出异常。 注:stop方法已经过时不再使用。 线程类Thread的其他方法 setPriority(int num) setDaemon(boolean b) join() 自定义线程名称 线程类名.setName() toString(): yield() 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地 智翔. CBD—软件人才实训基地
文档评论(0)