版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-理解线程的基本概念理解Java的线程模型掌握Java线程的状态和状态转换掌握线程的创建和使用掌握线程优先级的使用理解多线程的概念掌握Java的多线程实现掌握线程的同步技巧掌握线程的通信方式理解死锁的概念目标-2-线程多线程:在一个程序中同时运行多个任务多进程:在操作系统中能同时运行多个任务(程序)线程和进程的区别:进程是运行中的应用程序,拥有自己独立的内存空间和资源一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程线程是最小的处理单位,多个线程共享一块内存和资源当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变线程(Thread)是独立于其他线程运行的程序执行单元。
-3-线程的优点充分利用CPU资源简化编程模型简化异步事件处理使GUI更有效率节约成本-4-Java线程模型线程模型:Thread类Runnable接口Thread和Runnable区别:Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。Runnable是接口,只提供run()方法,实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。
Thread类封装线程所必须的功能,有start()、run()、sleep()等方法Runnable接口是标识某个Java类是否可作为线程类的接口,该接口中只提供了一个run()方法。-5-线程使用每个Java程序至少包含一个线程:主线程。其他线程都是通过Thread构造器或实例化继承类Thread的类来创建的。示例classMainThread{ publicstaticvoidmain(Stringargs[]){ //调用Thread类的currentThread()方法获取当前线程
Threadt=Thread.currentThread(); System.out.println("主线程是:"+t); }}-6-创建线程创建线程有两种方法:使用Thread类使用Runnable接口继承Thread类,重写run方法,可以创建线程类。语法格式:示例:class<类_名>extendsThread{ //重写run()方法
publicvoidrun(){ //线程的任务功能
}}classThread1extendsThread{ publicvoidrun(){ //获取当前线程的名字
System.out.println( Thread.currentThread().getName()); }}-7-Thread类方法名功能说明Thread()构造缺省的线程对象Thread(Runnabletarget)使用传递的Runnable构造线程对象Thread(Runnabletarget,Stringname)使用传递的Runnable构造名为name的线程对象Thread(ThreadGroupgroup,Runnabletarget,Stringname)使用传递的Runnable再group线程组内构造名为name的线程对象finalStringgetName()返回线程的名称finalbooleanisAlive()如果线程是激活的,则返回truefinalvoidsetName(Stringname)将线程的名称设置为由name指定的名称set\getPriority()设置得到线程优先级finalvoidjoin()等待线程结束staticvoidsleep(longmillis)用于将线程挂起一段时间,单位毫秒voidstart()调用run()方法启动线程,开始线程的执行voidstop()停止线程。已经不建议使用voidinterrput()中断线程staticintactiveCount()返回激活的线程数staticvoidyield()使正在执行的线程临时暂停,并允许其他线程执行-8-Runnable接口Runnable接口由单个方法run()组成,它在线程激活时执行。通过Runnable接口创建线程的步骤如下:1.实例化实现Runnable接口的类2.建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法3.通过Thread类的start()方法建立线程。
class<类_名>implementsRunnable{ publicvoidrun(){ //线程的任务功能
}}-9-线程状态-1线程状态:born:新线程状态runnable、running:就绪、运行状态blocked:阻塞状态sleeping:休眠状态waiting:等待状态dead:死亡状态-10-线程状态-2born:新线程状态当使用new来新建一个线程时,一个新的的线程就诞生了。当对这个线程调用了start()方法,或者这个线程的状态由born改变为runnable后。runnable、running:就绪、运行状态把处理器分配给一个处于runnable的线程之后,这个线程的状态就变成了running。可以通过Thread类的isAlive()方法来判断线程是否处于运行状态。
blocked:阻塞状态在线程试图执行某个不能立即完成的任务,并且该线程必须等待其他任务完成才能继续时,则该线程进入阻塞状态(blocked)。例如,线程等待输入/输出请求。sleeping:休眠状态线程执行过程中,可以通过sleep()方法使线程暂时停止执行,使线程进入sleep状态。sleep()方法的参数是毫秒,并声明了InterruptedException异常。另外还可以使用suspend()和resume()方法挂起和唤醒线程。-11-线程状态-3waiting:等待状态如果某个线程的执行条件还未满足,可以调用wait()方法,使其进入等待状态。一旦线程处于等待状态,在另一个线程对其等待对象调用notify()或notifyAll()方法时,则线程回到就绪状态。dead:死亡状态线程在下列情况下会结束:线程到run()方法的结尾;线程抛出一个未捕获异常或Error;调用interrupt()方法中断线程;调用join()方法等待线程结束;调用stop()方法直接停止线程。演示:水平移动按钮-12-线程状态-4btnStart.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ //创建线程对象
t=newThread(ButtonMove.this); //线程启动
t.start(); }});btnStop.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(t.isAlive()){ //线程停止
t.stop(); } }});publicvoidrun(){ try{ //休眠100毫秒
t.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); }}-13-线程优先级线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间,优先级高的线程有更大的机会获得CPU时间。线程的默认优先级值:Thread.NORM_PRIORITY,值为5每个新线程均继承创建线程的优先级。setPriority()设置线程优先级,值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority()获取线程的优先级值。
-14-就是在一个程序中实现多任务处理,即在主线程中有多个线程在运行,多个线程的执行是并发的。多线程,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题。
多线程-15-线程同步:保证某个资源在某一时刻只能由一个线程访问,以此保证共享数据及操作的完整性。同步的关键字synchronized可以使用synchronized关键字修饰同步方法或同步块 同步方法语法:同步块语法:线程同步synchronized返回类型方法(参数){//同步方法体}synchronized(object){//需要同步的语句}-16-线程通信线程通信的方法:wait()、notify()和notifyAll()调用wait()方法可以让线程等待,并释放对象锁,直到interrupt()方法中断它或者另一个线程调用notify()或notifyAll()通知它。wait()方法也可以带一个参数,用于指明等待的时间,使用此种方式不需要notify()或notifyAll()的唤醒。此方法只能在一个同步方法中调用。调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻塞。调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。wait()方法区别于sleep()方法的是:wait()方法调用时会释放对象锁,而sleep()方法不会。-17-死锁死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可“调节”的状态。常见的死锁模式是:当线程A拥有obj1上的对象锁,为完成任务同时需要获取obj2上的对象锁,而此时线程B正拥有obj2的对象锁,其为完成任务需要获取obj1上的对象锁。此时两个线程在对象资源上即无法获取(对方线程未执行完毕)也无法释放(自身线程未执行完毕),程序进入无限期的等待,死锁就发生了。-18-线程(Thread)是独立于其他线程运行的程序执行单元线程的主要应用在于可以在一个程序中同时运行多个任务通过继承Thre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【语文课件】学与问课件
- 【语文】2025届高三写作指导:链接课文的作文真题之选择性必修上册
- 医院安全课件
- 《HR系统培训》课件
- 生物制药用生物反应器产业规划专项研究报告
- 玻璃球瓶容器产业规划专项研究报告
- 气动关门器产业运行及前景预测报告
- 智能客服行业营销策略方案
- 牙用光洁剂产业规划专项研究报告
- 《海尔集团企业文化》课件
- 幼儿园课程故事开展培训
- 重大版小学英语六年级上册全册教案
- 高考语文一轮复习课件《劝学》《师说》
- 匠心筑梦成就出彩人生-大学生就业指导智慧树知到期末考试答案2024年
- 我国法治建设的历程+高中政治统编版必修三
- 艺术设计专业的职业生涯报告
- 火力发电厂施工图设计内容深度规定
- 污水处理厂EPC项目建设方案
- 酒店经理管理酒店运营
- AI在农业领域的应用
- 汽车eps行业国内外市场发展前景分析与投资风险预测报告
评论
0/150
提交评论