Java-绾跨▼PPT课件_第1页
Java-绾跨▼PPT课件_第2页
Java-绾跨▼PPT课件_第3页
Java-绾跨▼PPT课件_第4页
Java-绾跨▼PPT课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

.,1,线程,1线程概念2线程的生命周期3线程的实现4线程的优先级5多线程的同步6线程组,.,2,线程概念,什么是线程:线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。,线程,.,3,线程概念,2.什么是多线程:多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务.,线程,.,4,线程概念,说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。,线程,.,5,线程的生命周期,线程的生命周期:一个线程从创建到消亡的过程。线程的生命周期可分为四个状态:创建状态可运行状态不可运行状态4.消亡状态,线程,.,6,线程的生命周期,线程的状态转换图:,线程,.,7,线程的生命周期,创建状态当用new操作符创建一个新的线程对象时,该线程处于创建状态。处于创建状态的线程只是一个空的线程对象,系统不为它分配资源此时只能调用start方法启动该线程,调用其它任何方法都会产生线程非法状态异常。,线程,.,8,线程的生命周期,2.可运行状态执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体run()方法,这样就使得该线程处于可运行(Runnable)状态。这一状态并不是运行中状态(Running),因为线程也许实际上并未真正运行。,线程,.,9,线程的生命周期,3.不可运行状态当发生下列事件时,处于运行状态的线程会转入到不可运行状态。调用了sleep()方法;线程调用wait方法所等待的特定条件的满足线程输入/输出阻塞,线程,.,10,线程的生命周期,返回可运行状态:处于睡眠状态的线程在指定的时间过去后如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待进程条件的改变如果线程是因为输入/输出阻塞,输入/输出完成,线程,.,11,线程的生命周期,4.消亡状态当线程的run方法执行结束后,该线程自然消亡。,线程,.,12,线程的实现,在Java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法。继承Thread类并重载run方法。通过定义实现Runnable接口的类进而实现run方法。,线程,.,13,线程的实现,继承Thread类并重载run方法。Thread类:是专门用来创建线程和对线程进行操作的类。Thread中定义了许多方法对线程进行操作。Thread类在缺省情况下run方法是空的。可以通过继承Thread类并重写Thread类的run方法实现用户线程。,线程,.,14,线程的实现,继承Thread类并重载run方法。总体结构如下:publicclassMyThreadextendsThreadpublicvoidrun()MyThreadt=newMyThread();t.start();见例题:TwoThreadsTest.java,线程,.,15,线程的实现,执行Runnable接口的类实现run方法。通过建立一个实现了Runnable接口的对象,并以它作为线程的目标对象来创建一个线程。Runnable接口:定义了一个抽象方法run()。定义如下:publicinterfacejava.lang.Runnablepublicabstractvoidrun();,线程,.,16,线程的实现,执行Runnable接口的类实现run方法。创建的总体框架如下:classMyRunnerimplementsRunnablepublicvoidrun()MyRunnerr=newMyRunner();Threadt=newThread(ThreadGroupgroup,Runnabletarget,Stringname);例如:Threadt=newThread(r,“aa”);见例题:ThreadTesterer.java/ThreadTest.java,线程,.,17,线程的实现,总结:两种方法均需执行线程的start方法为线程分配必须的系统资源、调度线程运行并执行线程的run方法。在具体应用中,采用哪种方法来构造线程体要视情况而定。通常,当一个线程已继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。线程的消亡不能通过调用一个stop()命令。而是让run()方法自然结束。见例题:ThreadController.java,线程,.,18,线程的优先级,1.线程的优先级及其设置设置优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。一个线程的优先级设置遵从以下原则:线程创建时,子进程继承父进程的优先级线程创建后,可通过调用setPriority()方法改变优先级。线程的优先级是1-10之间的正整数。1-MIN_PRIORITY,10MAX_PRIORITY5-NORM_PRIORITY,线程,.,19,线程的优先级,线程的调度策略线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行。线程体中调用了yield()方法,让出了对CPU的占用权线程体中调用了sleep()方法,使线程进入睡眠状态线程由于I/O操作而受阻塞另一个更高优先级的线程出现。在支持时间片的系统中,该线程的时间片用完。,线程,.,20,线程的优先级,线程的调度策略请看两个程序,一个线程的运行是友好的,另一个线程的运行是不友好的。见例题:RaceTest1.javaRaceTest2.java,线程,.,21,线程的优先级,Thread的一些常用方法。测试threads:isAlive()Threadpriority:tgetPriority()tsetPriority()threads进入非执行状态Thread.sleep()Thread.yield(),线程,.,22,多线程的同步,为什么要引入同步机制在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种潜在资源冲突进行预防。解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁。,线程,.,23,多线程的同步,2.怎样实现同步对于访问某个关键共享资源的所有方法,都必须把它们设为synchronized例如:synchronizedvoidf()/*.*/synchronizedvoidg()/*.*/如果想保护某些资源不被多个线程同时访问,可以强制通过synchronized方法访问那些资源。调用synchronized方法时,对象就会被锁定。,线程,.,24,多线程的同步,publicclassMyStackintidx=0;chardata=newchar6;publicsynchronizedvoidpush(charc)dataidx=c;idx+;publicsynchronizedcharpop()idx-;returndataidx;,线程,.,25,多线程的同步,2.怎样实现同步说明:当synchronized方法执行完或发生异常时,会自动释放锁。被synchronized保护的数据应该是私有(private)的。,线程,.,26,多线程的同步,2.怎样实现同步同步的线程状态图:,线程,.,27,多线程的同步,怎样实现同步线程间的相互作用:waitandnotifyThepools:WaitpoolLockpool,线程,.,28,多线程的同步,怎样实现同步具有wait()和notify()的线程状态图:,线程,.,29,多线程的同步,怎样实现同步让我们看一个同步的综合例题:生产者和消费者问题。Producer.javaConsumer.javaCubbyHole.javaProducerConsumerTest.java,线程,.,30,线程组,1.线程组:所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。说明:在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。,线程,.,31,线程组,例子:publicThread(ThreadGroupgroup,Runnabletarget)publicThread(ThreadGroupgroup,Stringname)publicThread(ThreadGroupgroup,Runnablet

温馨提示

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

评论

0/150

提交评论