已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章多线程,本课目标,学完本门课程后,你能够,管理线程,实现线程之间的同步和通信,Linux操作系统上安装软件和部署项目,向数据库中发送SQL命令,执行数据的操作,使用jQuery操作判断是否含指定的CSS样式,使用HTML5新增属性验证表单内容的合法性,使用Ajax提升用户体验,2/51,预习检查,说明进程和线程的区别创建线程的方式有哪两种?线程的状态有哪几个?线程的什么方法可以设置线程休眠、线程的强制执行、线程的礼让?什么情况下需要进行线程的同步,线程同步有几种方式?,集中测试,3/51,回顾与作业点评,泛型集合与数据相比有哪些优势?Collection、List、Set、Map接口的联系和区别有哪些?ArrayList和LinkedList有什么异同之处?如何遍历List集合?点评作业的提交情况和共性问题,提问,作业点评,4/51,本章任务,模拟多人徒步爬山模拟叫号看病模拟接力赛跑模拟网络购票,5/51,本章目标,理解线程的概念掌握线程的创建和启动了解线程的状态掌握线程调度的常用方法掌握线程的同步理解线程安全的类型,6/51,进程和线程,Officeword进程,7/51,多线程,什么是多线程如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”多个线程交替占用CPU资源,而非真正的并行执行多线程好处充分利用CPU的资源简化编程模型带来良好的用户体验,8/51,主线程,Thread类Java提供了java.lang.Thread类支持多线程编程主线程main()方法即为主线程入口产生其他子线程的线程必须最后完成执行,因为它执行各种关闭动作,publicstaticvoidmain(Stringargs)Threadt=Thread.currentThread();System.out.println(当前线程是:+t.getName();t.setName(MyJavaThread);System.out.println(当前线程名是:+t.getName();,获得主线程对象,设置线程名,获取线程名,9/51,线程的创建和启动,在Java中创建线程的两种方式继承java.lang.Thread类实现java.lang.Runnable接口使用线程的步骤,10/51,继承Thread类创建线程2-1,定义MyThread类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程,publicclassMyThreadextendsThread/重写run()方法publicvoidrun()for(inti=1;i100;i+)System.out.println(Thread.currentThread().getName()+:+i);,publicstaticvoidmain(Stringargs)MyThreadthread=newMyThread();thread.start();/启动线程,run()方法中编写线程执行的代码,继承Thread类,启动线程,11/51,继承Thread类创建线程2-2,多个线程交替执行,不是真正的“并行”线程每次执行时长由分配的CPU时间片长度决定,MyThreadt1=newMyThread();MyThreadt2=newMyThread();t1.start();t2.start();,第2个线程执行,第1个线程执行,第2个线程执行,12/51,启动线程是否可以直接调用run()方法?,常见问题,主线程,主线程执行run(),t.run(),调用run(),只有主线程一条执行路径,多条执行路径,主线程和子线程并行交替执行,13/51,实现Runnable接口创建线程,定义MyRunnable类实现Runnable接口实现run()方法,编写线程执行体创建线程对象,调用start()方法启动线程,publicclassMyRunnableimplementsRunnablepublicvoidrun()for(inti=1;i100;i+)System.out.println(Thread.currentThread().getName()+:+i);,publicstaticvoidmain(Stringargs)MyRunnablemyRunnable=newMyRunnable();ThreadmyThread=newThread(myRunnable);thread.start();/启动线程,run()方法中编写线程执行的代码,实现Runnable接口,创建线程对象,14/51,比较两种创建线程的方式,继承Thread类编写简单,可直接操作线程适用于单继承实现Runnable接口避免单继承局限性便于共享资源,推荐使用实现Runnable接口方式创建线程,15/51,小结,创建线程有哪几种方式?如何启动线程?线程对象调用start()方法和调用run()方法的区别?,提问,16/51,训练要点使用继承Thread类的方式创建线程实现Thread类的run()方法,编写线程执行体使用start()方法启动线程需求说明创建两个子线程,每个线程均输出20次消息数字、“你好”、线程名观察多个线程交替执行的过程,指导,学员操作继承Thread类的方式创建线程2-1,17/51,实现思路创建线程类MyThread,并继承Thread类重写Thread类中的run()方法,编写方法体在测试类Test类中创建两个MyThread类的线程对象调用start()方法启动运行程序,观察多个线程交替执行的结果,指导,学员操作继承Thread类的方式创建线程2-2,18/51,学员操作实现Runnable接口的方式创建线程,需求说明修改上机练习1,要求线程类使用实现Runnable接口的方式创建,并修改测试类创建Thread类对象,使用Runnable接口实现类的对象作为构造方法的参数,练习,提示,19/51,常见问题及解决办法代码规范问题调试技巧,共性问题集中讲解,20/51,线程的状态,创建状态,就绪状态,阻塞状态,运行状态,死亡状态,启动线程,获得CPU资源,释放CPU资源,等待用户输入线程休眠等,线程自然执行完毕外部干涉终止线程,阻塞解除,21/51,线程调度,线程调度指按照特定机制为多个线程分配CPU的使用权,会员积分,22/51,线程优先级,线程优先级由110表示,1最低,默认优先级为5优先级高的线程获得CPU资源的概率较大,23/51,线程休眠,让线程暂时睡眠指定时长,线程进入阻塞状态睡眠时间过后线程会再进入可运行状态millis为休眠时长,以毫秒为单位调用sleep()方法需处理InterruptedException异常,publicstaticvoidsleep(longmillis),publicclassWaitpublicstaticvoidbySec(longs)for(inti=0;is;i+)System.out.println(i+1+秒);tryThread.sleep(1000);catch(InterruptedExceptione)e.printStackTrace();,线程休眠1秒,24/51,线程的强制运行2-1,使当前线程暂停执行,等待其他线程结束后再继续执行本线程millis:以毫秒为单位的等待时长nanos:要等待的附加纳秒时长需处理InterruptedException异常,publicfinalvoidjoin()publicfinalvoidjoin(longmills)publicfinalvoidjoin(longmills,intnanos),25/51,线程的强制运行2-2,publicstaticvoidmain(Stringargs)Threadtemp=newThread(newMyThread();temp.start();for(inti=0;i20;i+)if(i=5)trytemp.join();catch(InterruptedExceptione)e.printStackTrace();System.out.println(Thread.currentThread().getName()+运行:+i);/省略代码,阻塞主线程,子线程强制执行,26/51,线程的礼让2-1,暂停当前线程,允许其他具有相同优先级的线程获得运行机会该线程处于就绪状态,不转为阻塞状态,publicstaticvoidyield(),27/51,线程的礼让2-2,publicclassMyThreadimplementsRunnablepublicvoidrun()for(inti=0;i5;i+)System.out.println(Thread.currentThread().getName()+正在运行:+i);if(i=3)System.out.print(线程礼让:);Thread.yield();,publicstaticvoidmain(Stringargs)MyThreadmy=newMyThread();Threadt1=newThread(my,线程A);Threadt2=newThread(my,线程B);t1.start();t2.start();,当i=3时,当前线程礼让,28/51,小结,请简述线程的五个状态?什么是线程优先级,它在线程调度中的作用?join()方法和yield()方法的区别是什么?,29/51,训练要点使用任意一种方式创建线程使用Thread.sleep()方法设置线程休眠需求说明每个线程代表一个人可设置每人爬山速度每爬完100米显示信息爬到终点时给出相应提示,指导,学员操作使用多线程模拟多人徒步爬山2-1,30/51,实现思路创建线程类ClimbThread属性:爬100米时长(time),爬多少个100米(num)构造方法完成属性初始化实现run()方法线程休眠模拟爬山中的延时实现测试类Test创建多个线程对象模拟多个人,设置人名、爬100米时长,指导,学员操作使用多线程模拟多人徒步爬山2-2,31/51,学员操作显示、设置线程优先级,需求说明显示主线程、子线程默认优先级将主线程设置为最高优先级、子线程设置为最低优先级并显示,练习,32/51,学员操作模拟叫号看病,需求说明某科室一天需看普通号50个,特需号10个特需号看病时间是普通号的2倍开始时普通号和特需号并行叫号,叫到特需号的概率比普通号高当普通号叫完第10号时,要求先看完全部特需号,再看普通号使用多线程模拟这一过程,练习,33/51,常见问题及解决办法代码规范问题调试技巧,共性问题集中讲解,34/51,多线程共享数据引发的问题2-1,多线程实现网络购票,用户提交购票信息后第一步:网站修改网站车票数据第二步:显示出票反馈信息给用户,35/51,发现的问题不是从第1张票开始存在多人抢到一张票的情况有些票号没有被抢到,多线程共享数据引发的问题2-2,36/51,同步方法2-1,使用synchronized修饰的方法控制对类成员变量的访问synchronized就是为当前的线程声明一个锁,访问修饰符synchronized返回类型方法名(参数列表)或者synchronized访问修饰符返回类型方法名(参数列表),37/51,使用同步方法的网络购票,同步方法2-2,/同步方法:售票publicsynchronizedvoidsale()if(count=0)flag=true;return;/省略代码:修改数据/省略代码:显示信息,/调用同步方法publicvoidrun()while(!flag)sale();,38/51,同步代码块2-1,使用synchronized关键字修饰的代码块syncObject为需同步的对象,通常为this效果与同步方法相同,synchronized(syncObject)/需要同步的代码,publicvoidrun()while(true)synchronized(this)/同步代码块/省略修改数据的代码./省略显示信息的代码.,39/51,同步代码块2-2,多个并发线程访问同一资源的同步代码块时同一时刻只能有一个线程进入synchronized(this)同步代码块当一个线程访问一个synchronized(this)同步代码块时,其他synchronized(this)同步代码块同样被锁定当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码,40/51,线程安全的类型,查看ArrayList类的add()方法定义,publicbooleanadd(Ee)ensureCapacityInternal(size+1);elementDatasize+=e;returntrue;,集合扩容,确保能新增数据,在新增位置存放数据,ArrayList类的add()方法为非同步方法当多个线程向同一个ArrayList对象添加数据时,可能出现数据不一致问题,ArrayList为非线程安全的类型,41/51,线程安全的类型,为达到安全性和效率的平衡,可以根据实际场景来选择合适的类型,!,42/51,常见类型对比,Hashtable&HashMapHashtable继承关系实现了Map接口,Hashtable继承Dictionary类线程安全,效率较低键和值都不允许为nullHashMap继承关系实现了Map接口,继承AbstractMap类非线程安全,效率较高键和值都允许为nullStringBuffer&StringBuilder前者线程安全,后者非线程安全,43/51,小结,为什么要进行线程同步?线程同步有哪几种方式?请举例说明哪些是线程安全的类型,哪
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤粉工安全教育考核试卷含答案
- 2025年3-4岁摩擦力启蒙儿歌创作
- 角色认知与职业规划
- 2026年高职(数字媒体艺术设计)交互媒体设计综合测试题及答案
- 2026道德与法治一年级知识窗 爱护动物小常识
- 2026七年级上《整式的加减》知识点梳理
- 旅交会华侨城展位竞标方案中青旅联科1013
- 小学英语教师职业规划
- 智慧投资:股市之路-让投资成为人生赢家的秘诀
- 协同胜局:体育团队之道-打造高效沟通与协作的竞赛团队
- DBJ-T 15-270-2024 建筑幕墙工程技术标准
- 医药生物行业市场前景及投资研究报告:MNC管线数据预期差代谢类BD机会
- 仓库租赁合同范本上海仓库租赁合同范本5篇
- 2025年甘肃省委党校在职研究生招生考试(中共党史党建)综合试题及答案
- 文学写作入门(华东师范大学)学习通网课章节测试答案
- 2025年中小学生心理健康知识竞赛题库(及答案)
- 2025年青马班考试题目及答案
- 马来西亚中学数学试卷
- 新生儿呛奶窒息预防与处理
- 盛大传奇协议书
- 兵团连队资产管理办法
评论
0/150
提交评论