[工学]Java程序设计-10-多线程开发.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]Java程序设计-10-多线程开发

Java程序设计 第十章 多线程开发 学习目标 理解多线程概念和运行机制 掌握如何在程序中创建线程 理解线程的生命周期,设置线程的优先级 控制线程 掌握同步处理机制,避免冲突 掌握多线程在实际问题中的应用 10.1 理解线程 Runnable接口和Thread类均包含在java.lang包下,实际上,Thread类是实现了Runnable接口的线程类。 多线程在实际中的应用非常普遍。例如,一个面向多用户的邮箱系统利用线程处理同时到达的多封邮件,一个在线购物系统处理不同用户同时提出的产品查询、订单提交等请求。 10.2创建线程 10.2.1 从Thread派生线程类 class Baker extends Thread{ //等待添加新的代码 } 在这个代码中,Baker类继承了父类Thread,表明了它是一个线程类。基于Java单继承的特点,利用这种方法定义的类不能在继承其它父类。 10.2.2 实现Runnable接口创建线程目标类 class Consumer implements Runnable{ public void run() { // 等待添加任务代码 } } 任何实现接口Runnable的对象都可以作为一个线程的目标对象,类Thread本身也实现了接口Runnable,因此我们可以通过上述两种方法实现线程体。 10.2.3 定义线程执行的任务 要想使得创建的线程对象能够按照要求工作,还必须为它分派任务。就是重写线程类中的run()方法。 class Consumer implements Runnable{ public void run() { while(true){ //不断消费 // 挑选面包 //从货架上取下一个选中的面包 } } } 需要注意的是,这里定义的run()方法只是一个线程实例运行时会自动执行的任务代码,由虚拟机环境来寻找并执行run()方法中的任务代码,应用程序不要直接执行该方法。 class Baker extends Thread{ public void run() { while(true){ //不断生产 //生产面包 //往货架上放面包 } } } 10.2.4 创建线程实例 构造函数 Thread() Thread(Runnable target) Thread(Runnable target, String name) Thread(String name) 1 创建线程实例 Baker baker1 = new Baker(); //创建了一个面包师线程实例 从基于创建Runnable接口定义的线程类,创建时就比上面的代码要复杂一点,如: Consumer c1 =new Consumer(); //首先创建供线程运行的目标对象 Thread consumer1 = new Thread(c1); //再创建一个消费者线程实例 2 为线程实例起名 在创建实例时,可以为每一个线程实例指定名称。 Baker baker1 = new Baker(baker1); //创建了一个面包师线程实例 或者: Consumer c1 =new Consumer(); //首先创建供线程运行的目标对象 Thread consumer1 = new Thread(c1,consumer1);//创建一个消费者线程实例 如果在创建线程时,没有为其指定名称,则自动生成的名称的形式为 “Thread-”+n,其中的 n 为整数。Thread提供了getName()方法可以获得线程的名字 10.2.5真正的创建线程 创建线程的实例并不表示线程已经启动,必须明确的把线程实例启动起来。启动线程的过程很简单,就是首先创建线程的实例,启动实例的start()方法,注意不要直接运行run()方法。启动start()方法,该方法会执行run()方法,然后返回调用线程。 一旦执行了线程实例的start()方法,虚拟机就会寻找并执行实例中的run()方法并开始执行,此时一个线程就真正的被创建了,然后该线程就等待获得处理机等资源得以真正的运行。 public class Bakery { public static void main(String[] args) { Baker baker = new Baker(); baker.start(); Consumer c1 =new Consumer(); Thread consumer = new Thread(c1); consumer.start

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档