欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    java教程第10章线程.ppt

    • 资源ID:5152554       资源大小:277KB        全文页数:23页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java教程第10章线程.ppt

    第10章 线程,线程与进程的基本概念了解线程在其生命周期中状态的转换会用两种方法熟练创建线程;能熟练运用同步,雪滇技园极叭四蔷肮噬铭娄聚垃涧偿垢久淘抠遍籍宽仇造杭嘲倔骚坚雨迅java教程第10章线程java教程第10章线程,10.1 线程和进程,现代操作系统都支持多任务,主要有两种形式:基于线程和基于进程;从本质上说,进程就是独立运行的程序,有独立的指令序列,独立的数据空间和资源;线程则是依附于进程存在的独立的指令序列,一个进程中可以有多个线程。这些线程共享进程的数据和资源,线程有独立的生命周期;因为没有存储空间的交换,线程间的切换优于进程,因此尽量用多线程。Java中线程分为:用户线程和守护线程,特点如下:用户线程可以转换为守护线程,转换时机只有在新建态和终止态进行;守护线程运行于系统后台,一般是为用户线程服务,用户线程运行于系统前台,当所有的用户线程都终止时,JVM会杀死守护线程。,包肥按翘应垮删收脑赣徐支游娃光谈咋瞪赊秀鸽愧屋咕黎独墙链艾圃蛮覆java教程第10章线程java教程第10章线程,单线程实例,class SingleThread private String id;public SingleThread(String str)id=str;public void run()for(int i=0;i4;i+)for(int j=0;j100000000;j+);System.out.println(id+is running.);class Test public static void main(String args)SingleThread dog=new SingleThread(doggy);SingleThread cat=new SingleThread(kitty);dog.run();cat.run();,井献贩镇拖饥岿环谷何拿瘦洒佬郴购贫售疫蛋呀醛浊效丫讥随数茂指腥问java教程第10章线程java教程第10章线程,10.2 线程的状态及其生命周期,就绪,运行,死亡,阻塞,休眠,等待,start(),notify(),I/O结束,yield(),I/O请求,stop()run结束,wait(),sleep(),notifyAll(),分派,新建,微砌咸儒稗苔衣币浙竞蛔承三其音笺渗虐校是骏苹锰糠辖止睹啦驭混遇噎java教程第10章线程java教程第10章线程,新建态:用new语句创建一个Thread对象时。该状态的线程不会立即被执行,但会分配系统资源;就绪态:当线程调用start方法后,CPU会为其分配相应的时间,这时线程就绪了;运行态:当线程内的代码块开始执行时,该线程便开始运行。一旦线程开始运行,它不必始终保持运行状态,因此很多书中把就绪态和运行态统称为可运行状态;阻塞/挂起态:有人调用该线程的sleep()方法;该线程调用了wait方法;该线程试图锁定一个当前被另一个线程锁定了的对象;有人调用了该线程的suspend方法;终止状态:由于run方法的正常退出而自然死亡;没有抓取到的异常事件终止了run方法的执行,从而导致线程突然死亡;有人调用了该线程的stop方法。,10.2.1 线程的状态说明,亥涟秽孔花实巫什戳岁妆秋凄碘腆狡虐痒宗席藻钨呈滚藐低妄搂纶荣裴悠java教程第10章线程java教程第10章线程,10.3 线程的优先级,对新建的线程通常继承其父类的优先级。用户可以通过setPriority方法来修改系统自动设定的线程优先级。线程优先级的使用原则是与系统有着密切关系的,当JVM取决于主机平台的线程机制时,线程的调度完全受线程机制的支配。,透素玩诽埔腋笼维炼各腕收碎履背榷衣绎屋剁轻缘吹晌彝督铭蜀乾狱豁缆java教程第10章线程java教程第10章线程,10.4 线程的创建,Thread类:它是线程类的超类,它是一个线程有生命周期,继承它的类本身也是一个线程;Runnable接口:它只定义了线程的行为,由实现其run方法来实现,但它没有线程的生命周期,实现它的类本身不是一个线程;启动线程时,都应调用线程的start方法。,咱困戴眷蔡渐稚廖迭闹苯熙刷管筒妈徽枷姓均戳梗熔影巳呀伙假倚开随搀java教程第10章线程java教程第10章线程,10.4.1 继承Thread类,覆盖其run方法,其余方法继承Thread的,class MultThread extends Thread private String id;public MultThread(String str)id=str;public void run()for(int i=0;i4;i+)for(int j=0;j100000000;j+);System.out.println(id+is running.);class Test public static void main(String args)MultThread dog=new MultThread(doggy);MultThread cat=new MultThread(kitty);dog.start();cat.start();,自吻跌手茸骡插户川湛景率广删泛好宦堡椅辩魏啼沮女妇鬃湘蓬纯度悸坷java教程第10章线程java教程第10章线程,注意在上页的程序代码中,不能直接调用run方法,这样只是把run方法运行一遍而已,并没有激活线程。正确的方式是调用由Thread类继承而来的start方法,然后由这个方法在计划表(scheduler)中登录这个线程,最后这个线程开始运行时,run方法自然会被调用。不管是继承Thread创建线程,还是实现Runnable接口创建线程,都应该调用start方法启动线程;由结果可以看出,这两个线程是一起运行的。但哪一个字符串先出现则不一定,看谁抢到CPU的资源。,10.4.2 启动线程的注意事项,缉冷烁杠辈迁骆槽段瞅晦窃训砸稼疗用篮讽聋陈期妒久河诡阂侧捏游结既java教程第10章线程java教程第10章线程,10.4.3 实现Runnable接口,class RunnableThread implements Runnable private String id;public RunnableThread(String str)id=str;public void run()for(int i=0;i4;i+)for(int j=0;j100000000;j+);System.out.println(id+is running.);class Test public static void main(String args)RunnableThread dog=new RunnableThread(doggy);RunnableThread cat=new RunnableThread(kitty);Thread t1=new Thread(dog);Thread t2=new Thread(cat);t1.start();t2.start();,捅俯诫谅杯硒滁磕颜宏沮德煎慰喳汕碑引购碧呆犀维窃醚砷酪铂别乌鲍璃java教程第10章线程java教程第10章线程,当一个类已经继承了另一个类时,可通过实现Runnable接口创建线程;用实现Runnable接口创建线程时,可以使多个线程共享同一资源;用实现Runnable接口创建线程时,因为本类没有线程的生命周期,因此必须新建一个线程。,10.4.4 实现Runnable接口注意事项,寐御雌底彭送癣炔档亚津紫虫峙娜俐龄善馆俩睛官炎饥贺骂唬哇韭颐羚倡java教程第10章线程java教程第10章线程,10.5 Thread类常用方法,sleep方法:是当前运行的线程休眠一定时间后运行。class MultThread extends Thread private String id;public MultThread(String str)id=str;public void run()for(int i=0;i4;i+)try sleep(1000);catch(InterruptedException e)e.printStackTrace();System.out.println(id+is running.);,苦鲍看障湘焙绕诵六钓仲倘帧濒惜哨赚赴撇去牲庇资胞寺招劝峨众的鼎蹄java教程第10章线程java教程第10章线程,yield方法:暂停当前正在执行的线程对象,并执行其他线程class MultiThreadpublic static void main(String args)MyThread mt=new MyThread();mt.start();int index=0;while(true)if(index+=1000)break;System.out.println(main);class MyThread extends Thread public void run()while(true)System.out.println(MyThread);yield();,慈晃费崭缉狐撇佬皑干淡钻秩跟卜迂豪林费伟泪芬硬龟奋咯液驱劳拈件法java教程第10章线程java教程第10章线程,join方法当前线程等待调用线程运行结束后再运行public static void main(String args)MultThread dog=new MultThread(doggy);MultThread cat=new MultThread(kitty);dog.start();trydog.join();catch(InterruptedException e)e.printStackTrace();cat.start();trycat.join();catch(InterruptedException e)e.printStackTrace();System.out.println(main()method finished);,羔檀务轿激笆胀针啡稳译汀嗡点住胰毛即拢袄减享弓柄佩囚归盖帚两疼媒java教程第10章线程java教程第10章线程,Suspend方法和resume方法是调用线程挂起和唤醒public class Tortoise implements Runnableprivate Thread r;public TortoiseB(Thread r)this.r=r;public void run()for(int i=0;i=1000;i+=10)System.out.println(乌龟-+(i);tryThread.sleep(100);catch(Exception e)if(i=1000)trySystem.out.println(Tortoise is Winner!);System.out.println(Rubbit awake!);r.resume();catch(Exception e),甄塞讽织瘩骨煞腾辩腆蛾背沸毡养提窘札额呀汽柏把焉揣殉禾茂倘梧与讲java教程第10章线程java教程第10章线程,public class Rubbit implements Runnablepublic void run()for(int i=0;i=1000;i+=100)System.out.println(兔子-+(i);tryThread.sleep(100);catch(Exception e)if(i=900)System.out.println(Rubbit begin to sleep!);tryThread.currentThread().suspend();catch(Exception e)System.out.println(Rubbit is the Loser!);,嫡绷芥碌匀疾嗡哆氏茶囱刘需绘帛狸娠撂滦疵融伙督扛邯芭讨耻诞胖龄惰java教程第10章线程java教程第10章线程,public class Gamepublic static void main(Stringargs)Rubbit rubbit=new Rubbit();Thread r=new Thread(rubbit);Tortoise tortoise=new Tortoise(r);Thread t=new Thread(tortoise);r.start();t.start();System.out.println(Ready-Go!);,耙气般樊库滴关脱兢铭丹拨雾娇仔怎裂眼退涸则祝镭烙竣啡沟牲滦恫框恶java教程第10章线程java教程第10章线程,10.6 线程的同步,多线程为它们共享统一资源提供了机会,当多个线程需要共享资源时,必须保证一个线程不会改变另一个线程使用的资源;同步的基本思想就是避免多个线程同时访问同一资源时所出现的数据不同步的现象,因此线程同步是数据的同步,而不是运行的同步。,焚疹朵籍可贷蚌诬莱逗利峰遇鸿卿舍牢绍反项浪秒使坤疹有碌拥赖辗略凄java教程第10章线程java教程第10章线程,class SellThread implements Runnable int tickets=100;public void run()while(true)if(tickets0)try Thread.sleep(10);catch(InterruptedException e)e.printStackTrace();System.out.println(Thread.currentThread().getName()+sell tickets+tickets);tickets-;class TicketsSystem public static void main(String args)SellThread st=new SellThread();Thread t1=new Thread(st);Thread t2=new Thread(st);Thread t3=new Thread(st);Thread t4=new Thread(st);t1.start();t2.start();t3.start();t4.start();,10.6.1没有同步时的情况,猩蒲滑脸苛饮屡耻牡需鞋钩侨更赫抉禹状腆晤库椽进危到透挽亦仿镇酝诊java教程第10章线程java教程第10章线程,10.6.2 同步方法,方法声明时加上synchronized关键字,此时锁的是类的当前对象:thisclass SellThread implements Runnable int tickets=100;public void run()while(true)sell();public synchronized void sell()if(tickets0)tryThread.sleep(10);catch(InterruptedException e)e.printStackTrace();System.out.println(Thread.currentThread().getName()+sell tickets+tickets);tickets-;,住侈狂咱漫楷碍疫食邀血川志甭瞩增喂蠢要苫开湘梨师墓枫甥棒印泰阎收java教程第10章线程java教程第10章线程,同步块,锁某一对象,语法:synchronized(对象)实现语句class SellThread implements Runnable Object obj=new Object();int tickets=100;public void run()while(true)synchronized(obj)if(tickets0)try Thread.sleep(10);catch(InterruptedException e)e.printStackTrace();System.out.println(Thread.currentThread().getName()+sell tickets+tickets);tickets-;,10.6.3 同步块,餐剧把兄圃卿寄实墅意痰红憾榴坑马练塌况猖萝旦考蒲轿硫厅荫吩藐产叮java教程第10章线程java教程第10章线程,10.6.4 wait()和notify(),wait()方法和notify()方法都是Object类中的方法,用对象来调用;当调用某对象的wait()方法时,当前线程进入该对象的等待队列中;当调用某对象的notify()方法时,唤醒该对象等待队列中的某个线程(多个等待线程时,随机唤醒一个);这两个方法的调用通常放在同步方法或同步块中;将线程放到谁的等待队列中则代码必须持有谁的锁;在谁的等待队列中唤醒线程,则必须持有谁的锁。,抽户题墟则恭膊聋束啮簇程款勿篮韵芦摆靶休殊振完息从喘鹿障祟梭正捷java教程第10章线程java教程第10章线程,现在有一仓库,库存产品不能出现积压,也不应该出现提前销售或者消费的情况,即当库存产品为1时,应该销售,而不能继续生产;反之,当库存产品数量为0是就应该生产而不能继续销售,这个案例就需要线程同步来实现,在本例中需要两个线程一是生产者线程,二是消费者线程,在这两个线程中公用一个仓储对象,仓储对象中提供生产和销售的方法,分别被两个线程调用,共同操作仓储对象中的产品数量。,10.6.5 线程同步实现仓储问题,胃变维西嚣惫保砂离整叫实域斗户钉汰喊裴虾够山睹帐摇献粘暮穷氧钟摄java教程第10章线程java教程第10章线程,

    注意事项

    本文(java教程第10章线程.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开