java初级及高级讲解ppt - 15.线程_第1页
java初级及高级讲解ppt - 15.线程_第2页
java初级及高级讲解ppt - 15.线程_第3页
java初级及高级讲解ppt - 15.线程_第4页
java初级及高级讲解ppt - 15.线程_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

第十五章线程本章目标1.线程基础线程的概念模型创建线程两种方式后台线程GUI线程2.线程控制线程状态线程优先级线程串行化线程休眠线程让步线程挂起和恢复本章目标4多线程编程专题线程间数据传输类同步性与线程安全定时器3线程的同步临界资源问题互斥锁死锁线程同步通讯生产者-消费者问题什么是线程线程是一个程序内部的顺序控制流。线程和进程每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。多进程:在操作系统中能同时运行多个任务(程序)多线程:在同一应用程序中有多个顺序流同时执行线程的概念模型1.虚拟的CPU,由java.lang.Thread类封装和虚拟;2.CPU所执行的代码,传递给Thread类对象;3.CPU所处理的数据,传递给Thread类对象。创建线程Java的线程是通过java.lang.Thread类来实现的。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。多线程Java中引入线程机制的目的在于实现多线程(Multi-Thread)多线程共享代码和数据多线程之间可以共享代码和数据。Runner2r=newRunner2();Threadt1=newThread(r);Threadt2=newThread(r);线程虚拟CPU代码数据

t1 Thread类对象t1Runner2类中的run方法Runner类型对象rt2 Thread类对象t2Runner2类中的run方法Runner类型对象r创建线程第二种方式直接继承Thread类创建线程两种方式比较一.使用Runnable接口创建线程:可以将CPU、代码和数据分开,形成清晰的模型;线程体run()方法所在的类还可以从其他类继承一些有用的属性或方法;并有利于保持程序风格的一致性。二.直接继承Thread类创建线程:Thread子类无法再从其他类继承编写简单,run()方法的当前对象就是线程对象,可直接操纵。后台线程相关基本概念:后台处理(BackgroundProcessing)后台线程(BackgroundThread/DaemonThread)用户线程(UserThread)主线程(MainThread)子线程(SubThread)Thread类提供的相关方法:publicfinalboolean

isDaemon()publicfinalvoidsetDaemon(Booleanon)GUI线程GUI程序运行过程中系统会自动创建若干GUI线程常见GUI线程:AWT-Windows线程AWT-EventQueue-n线程AWT-Shutdown线程GUI线程展示线程生命周期线程的生命周期新建状态就绪状态运行状态阻塞状态终止状态挂起新线程(新建)就绪运行死亡睡眠等待阻塞线程优先级线程的优先级用数字来表示,范围从1到10。主线程的缺省优先级是5,子线程的优先级默认与其父线程相同。Thread类提供的相关方法:publicfinalint

getPriority();publicfinalvoidsetPriority(int

newPriority)相关静态整型常量:Thread.MIN_PRIORITY=1Thread.MAX_PRIORITY=10Thread.NORM_PRIORITY=5线程串行化在多线程程序中,如果在一个线程运行的过程中要用到另一个线程的运行结果,则可进行线程的串型化处理。Thread类提供的相关方法:publicfinalvoidjoin()publicfinalvoidjoin(long

millis)publicfinalvoidjoin(long

millis,int

nanos)线程休眠线程休眠——暂停执行当前运行中的线程,使之进入阻塞状态,待经过指定的“延迟时间”后再醒来并转入到就绪状态。Thread类提供的相关方法:publicstaticvoidsleep(long

millis)publicstaticvoidsleep(long

millis,int

nanos)线程让步线程让步——让运行中的线程主动放弃当前获得的CPU处理机会,但不是使该线程阻塞,而是使之转入就绪状态。Thread类提供的相关方法:publicstaticvoidyield()线程挂起和恢复线程挂起——暂时停止当前运行中的线程,使之转入阻塞状态,并且不会自动恢复运行。线程恢复——使得一个已挂起的线程恢复运行。Thread类提供的相关方法:publicfinalvoidsuspend()publicfinalvoidresume()终止线程线程控制基本方法临界资源问题(1)临界资源问题两个线程A和B在同时操纵Stack类的同一个实例(栈),A向栈里push一个数据,B则要从堆栈中pop一个数据。Pbulicclassstack{int

idx=0;char[]data=newchar[6];publicvoidpush(charc){data[idx]=c;idx++;}publiccharpop(){idx--;returndata[idx];}}临界资源问题(2)互斥锁在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。synchronized用法用于方法声明中,标明整个方法为同步方法.publicsynchronizedvoidpush(charc){data[idx]=c;idx++;}用于修饰语句快,标明整个语句块为同步块:publiccharpop(){//其它代码synchronized(this){

idx--; returndata[idx];}//其它代码}线程死锁并发运行的多个线程间彼此等待、都无法运行的状态称为线程死锁。(A\B两个人在打架,要想A松开,那么A要求B先松开,而B也有同样的要求,这种互不相让的状态就叫做死锁)。线程同步通信为避免死锁,在线程进入阻塞状态时应尽量释放其锁定的资源,以为其他的线程提供运行的机会。相关方法:

温馨提示

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

评论

0/150

提交评论