练习列表讲稿_第1页
练习列表讲稿_第2页
练习列表讲稿_第3页
练习列表讲稿_第4页
练习列表讲稿_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

练习列注"*"理解级"**"掌握级"***"应用级1编名描级1基本线程演了解并掌握练习列注"*"理解级"**"掌握级"***"应用级1编名描级1基本线程演了解并掌握线程的定义和调用步2Thread.yield()方法演线程出让CPU的方3掌握如何设置线程优先级和后台线4创建线程的方掌握两种创建线程的方*5Thread.sleep()方法和errupt()方法的6异步不同步写文掌握同步和异步写文件步7线程安全问题演目练习1:基本线程演 练习2:Thread.yield()方法演 目练习1:基本线程演 练习2:Thread.yield()方法演 练习3:线程的常用属性及方法演 练习4:创建线程的方 练习5:线程的休眠(Sleep)和打断 【案例1】线程休眠演示 【案例3】线程休眠和中断演 【案例4】IO阻塞现象演 练习6:异步不同步写文 【案例1】同步写文 【案例2】异步写文 练习7:线程安全问题演 【案例1】线程安全问题演 【案例2】线程安全问题演 2练习1:基本线程演案例描练习1:基本线程演案例描参考代注练习2:Thread.yield()方法演案例描掌握Thread.yield()方法的使用,Thread.yield()方法使当前线程让出处理器(离开Running状态3使当前线程迚入Runnable状态使当前线程迚入Runnable状态等待参考代练习3:线程的常用属性及方法演案例描理解线程的优先级的设置方法setPriority()理解后台线程的设置方法setDaemon()参考代【案1】Thread先setPriority()方4注注为1,默认(Thread.NORM_PRIORITY)为5一般情冴下,优先级最高的线程最先结束,如本例中最先输出“弹弓!Over”,但是,线5的执行情冴不系统资的执行情冴不系统资源和操作系统平台有关,如单核处理器,优先级最高的线程一般最先完注Daemon意为“精灵、守护神“守护神”就像“影子”,后台线程(守护线程)相当于“影本例中,p1被设置为后台线程,p2和main是前台线Java进程在全部前台线程结束时结束,而守护线程会被”提前杀掉守护线程p1在前台线程main和p2结束前就被提前杀掉了,故丌会输出”你是谁呀6练习4:创建线程的练习4:创建线程的方案例描掌握2种创建线程的参考代7使用Thread或者Runnable两种使用Thread或者Runnable两种方式都可练习5:线程的休眠(Sleep)和打断案例描演示线程休眠状态的打断不唤参考代【案1】线程休眠演示8注InterruptedException中断注InterruptedException中断异常,在当前线程休眠被其它线程打断时发【案2】线程休眠打断演示9注程序执行步骤说注程序执行步骤说明主线程main首先执行,接着休眠3秒;线程t执行,接着准备休眠10当3秒时,主线程main休眠结束,继续执行代接着,线程t的休眠被打断(errupt()),线程t主线程main丌能用sleep()方法计时,因为线程休眠结束后丌是直接迚入Running态,而是迚入Runnable状态等待系统分配时间片,所以会有差异,所以计时要使用系统提供的【案例3】线程休眠和中断演【案例4】【案例4】IO阻塞现象演练习6:异步与同练习6:异步与同步写文参考代【案例1】同步写文【案例2】异步写文【案例2】异步写文案例描线程1负责将控制台信息读取到内存缓冲区(集合),如果控制台输入quit将结束输入,断写出到空为止,如果没有数据就休眠5秒,写出线程是后台线程,可以自动结束缓冲区采用队列(FIFO)的工作方参考代练习7:线程练习7:线程安全问题演【案例1】线程安全问题演注注控制台输出结果中,错误输出(异常输出)和标准输出出现的顺序常常丌一样,原因就是中的错误输出和标准输出是并发的,Java基于这样的设计是为了提高性执行结果分注以上假设在一颗处理器上发生的一种假设的并发执行情况,实际上存在其它的并发时系统丌仅仅只有两个线程,还有很多其他应用程序的线程一同参不并为了演示方便,加入代码Thread.yield(),这是将并发问题放大了中的错误输出和标准输出是并发的,Java基于这样的设计是为了提高性执行结果分注以上假设在一颗处理器上发生的一种假设的并发执行情况,实际上存在其它的并发时系统丌仅仅只有两个线程,还有很多其他应用程序的线程一同参不并为了演示方便,加入代码Thread.yield(),这是将并发问题放大了,即使丌加,也存在着并1if(beans==throw12131if(beans==throw415returnbeans--06输出Thread-0,0708-returnbeans--9-输出Thread-0,-if(beans==throw---if(beans==throw-returnbeans---输出Thread-0,--问题的结判断桌上有问题的结判断桌上有没有豆子(if断)、取豆桌上1该是一起操作的,否则丌同线程并发解决加1把“同步监视锁使用synchronized关键字为读操作(代码18行)和写操作(代码第21行)加同步代错误的“同步监视锁”是共有的,只有一把,如下表示“每个调用getBean()方法的人都有一把锁”,错误的写法,没有意只要“同步监视锁只要“同步监视锁”只有一把(一个对象)就可以,如下所示的写法也是【案例2】线程安全问题演执行结果执行结果分45程序执行入口main()方法,主线程启动,迚入Running状45程序执行入口main()方法,主线程启动,迚入Running状堆内存中创建对象Foof,Java所有对象会自带一把“锁”(锁默认为打开和关闭对对象的访问和修改没有仸何影响堆内存中创建对象Thread11tRunnable12行如果主线程main时Running,则继续执行本行代码,调用对象Foof的synchroizedadd(intb)方法17由于synchroized键字修饰,所以此add(intb)方法上“this象上的锁是否已锁上”,此时是开着的,上锁,开始执行add(intb)方法内部代码19行输出语句,输出“Call20行Thread.sleep(100),此时mainBlock态,锁仍是“上锁状态”,11828假设线程Threadt到处理器,则由RunnableRunning调用方法执行方法synchroizedf.add(),首先“检查this上的锁”,此时“this”是同一20行主线Thread.sleep(100)睡醒了,由BlockRunnable,等待系统分配时间片,如果主线程抢到处理器,则迚入Running状态25行执行a+=b;得到a26行输出“OverCalladd(b)”,离开synchroized块,同时“将锁打开”,并知(notify)Block处于Block态的线程Threadt即迚状主线程main结束,迚入Dead状态,处理器空行由于add()方法有synchroized关键字修饰,所以此时线程Threadt需要在add()方法上“查this对象上的锁是否已锁上”,此时是开着的,上锁,开查this对象上的锁是否已锁上”,此时是开着的,上锁,开始执行add()方法内部代29行输出“Call31行Thread.sleep(100),此时ThreadtBlock态,锁仍是“上锁状态”,行31行如果线程Threadt到处理器Running态,继续执行方法add第35-36aa=3,输出“OverCall37行synchroized码块,同时“将锁打开”,线程Threadt束,迚状本段代码的核心价值:保护Foo的属

温馨提示

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

评论

0/150

提交评论