Transparancy 11Java语言概述(benet).ppt

上传人:hyn****60 文档编号:70757899 上传时间:2023-01-27 格式:PPT 页数:30 大小:265.50KB
返回 下载 相关 举报
Transparancy 11Java语言概述(benet).ppt_第1页
第1页 / 共30页
Transparancy 11Java语言概述(benet).ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《Transparancy 11Java语言概述(benet).ppt》由会员分享,可在线阅读,更多相关《Transparancy 11Java语言概述(benet).ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Version3.0线程线程第十一章第十一章回顾回顾每个用户自定义的每个用户自定义的 Applet 都必须扩展都必须扩展 java.applet.Applet 类。类。在在 HTML 文件中用文件中用.标记嵌标记嵌入类文件。入类文件。Applet 的执行从的执行从 init()方法开始方法开始通过通过 向向Applet传递参数传递参数通过通过 paint()、getImage()和和 drawImage()方方法可以在法可以在 Applet 中绘制图像。中绘制图像。2 2目标目标了解多线程的概念了解多线程的概念掌握如何创建线程掌握如何创建线程了解死锁的概念了解死锁的概念掌握线程同步掌握线程同步

2、掌握使用掌握使用 wait()和和 notify()在线程之间进在线程之间进行通信行通信3 3多任务处理多任务处理进程是指一种进程是指一种“自包容自包容”的运行程序,有的运行程序,有自己的地址空间自己的地址空间;线程是进程内部单一的线程是进程内部单一的一个顺序控制流一个顺序控制流 基于进程的特点是允许计算机同时运行两基于进程的特点是允许计算机同时运行两个或更多的程序。个或更多的程序。基于线程的多任务处理环境中,线程是最基于线程的多任务处理环境中,线程是最小的处理单位。小的处理单位。多任务处理有两种类型:多任务处理有两种类型:-基于进程基于进程 -基于线程基于线程4 4基于线程的多任务处理的优点

3、基于线程的多任务处理的优点基于线程所需的开销更少基于线程所需的开销更少在多任务中,各个进程需要分配它们自己独在多任务中,各个进程需要分配它们自己独立的地址空间立的地址空间多个线程可共享相同的地址空间并且共同分多个线程可共享相同的地址空间并且共同分享同一个进程享同一个进程进程间调用涉及的开销比线程间通信多进程间调用涉及的开销比线程间通信多线程间的切换成本比进程间切换成本低线程间的切换成本比进程间切换成本低 5 5多线程多线程多线程多线程在在Java中,一个应用程序可以包含多个线程。中,一个应用程序可以包含多个线程。每个线程执行特定的任务,并可与其他线程并每个线程执行特定的任务,并可与其他线程并发

4、执行发执行 多线程使系统的空转时间最少,提高多线程使系统的空转时间最少,提高CPU利用利用率率多线程编程环境用方便的模型隐藏多线程编程环境用方便的模型隐藏CPU在任务在任务间切换的事实间切换的事实6 6主线程主线程在在Java程序启动时,一个线程立刻运行,程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。该线程通常称为程序的主线程。主线程的重要性体现在两个方面:主线程的重要性体现在两个方面:它是产生其他子线程的线程。它是产生其他子线程的线程。通常它必须最后完成执行,因为它执行各种通常它必须最后完成执行,因为它执行各种关闭动作。关闭动作。7 7主线程示例主线程示例class Mythre

5、ad extends Thread public static void main(String args)Thread t=Thread.currentThread();System.out.println(当前线程是当前线程是:+t);t.setName(MyJavaThread);System.out.println(当前线程名是当前线程名是:+t);try for(int i=0;i3;i+)System.out.println(i);Thread.sleep(1500);catch(InterruptedException e)System.out.println(主线程被中断主线程

6、被中断);获得当前线程,获得当前线程,即主线程即主线程改变线程的改变线程的内部名称内部名称输出每个数后输出每个数后暂停暂停15001500毫秒毫秒8 8创建线程创建线程 2-1通过以下两种方法创建通过以下两种方法创建 Thread 对象:对象:-声明一个声明一个 Thread 类的子类,并类的子类,并覆盖覆盖run()方法。方法。class mythread extends Thread public void run()/*覆盖覆盖该方法该方法*/*/-声明一个实现声明一个实现 Runnable 接口的类,并实现接口的类,并实现run()方法。方法。class mythread implem

7、ents Runnable public void run()/*实现该方法实现该方法*/*/9 9创建线程创建线程 2-2要触发一个新线程,使用要触发一个新线程,使用 start()方法,如:方法,如:Mythread t=new Mythread();t.start();在调用在调用 start()方法时,将创建一个新的控方法时,将创建一个新的控制线程,接着它将调用制线程,接着它将调用 run()方法。方法。run()方法中的代码定义执行线程所需的功方法中的代码定义执行线程所需的功能。能。1010创建线程示例创建线程示例class MyThread1 extends Thread publ

8、ic static void main(String args)Thread t=Thread.currentThread();System.out.println(主线程是主线程是:+t);MyThread1 ex=new MyThread1();ex.start();public void run()System.out.println(子线程是子线程是:+this);或者使用或者使用implements Runnable 1111线程的状态线程的状态 4-1新建新建(Born):新建的线程处于新建状态新建的线程处于新建状态就绪就绪(Ready):在创建线程后,它将处于在创建线程后,它将处

9、于就绪状态,等待就绪状态,等待 start()方法被调用方法被调用运行运行(Running):线程在开始执行时进入线程在开始执行时进入运行状态运行状态睡眠睡眠(Sleeping):线程的执行可通过使用线程的执行可通过使用 sleep()方法来暂时中止。在睡眠后,线程方法来暂时中止。在睡眠后,线程将进入就绪状态将进入就绪状态1212线程的状态线程的状态4-2等待等待(Waiting):如果调用了如果调用了 wait()方法,方法,线程将处于等待状态。用于在两个或多线程将处于等待状态。用于在两个或多个线程并发运行时。个线程并发运行时。挂起挂起(Suspended):在临时停止或中断线在临时停止或中

10、断线程的执行时,线程就处于挂起状态。程的执行时,线程就处于挂起状态。恢复恢复(Resume):在挂起的线程被恢复执在挂起的线程被恢复执行时,可以说它已被恢复。行时,可以说它已被恢复。1313阻塞阻塞(Blocked)在线程等待一个事件时在线程等待一个事件时(例如输入(例如输入/输出操作),就称其处于阻塞输出操作),就称其处于阻塞状态。状态。死亡死亡(Dead)在在 run()方法已完成执行或方法已完成执行或其其 stop()方法被调用之后,线程就处于死方法被调用之后,线程就处于死亡状态。亡状态。线程状态线程状态4-31414线程的状态线程的状态 4-4挂起挂起 新线程(新建)新线程(新建)就绪

11、就绪运行运行死亡死亡睡眠睡眠等待等待阻塞阻塞1515可能使线程暂停执行的条件可能使线程暂停执行的条件线程:线程:-线程优先级比较低,因此它不能获得线程优先级比较低,因此它不能获得 CPU时间。时间。-使用使用 sleep()方法使线程睡眠。方法使线程睡眠。-通过调用通过调用 wait()方法,使线程等待。方法,使线程等待。-通过调用通过调用 yield()方法,线程已显式出让方法,线程已显式出让CPU控制权。控制权。-线程由于等待一个文件线程由于等待一个文件I/O事件被阻塞。事件被阻塞。1616线程状态的示例线程状态的示例 class ThreadStateDemo extends Threa

12、d Thread t;public ThreadStateDemo()t=new Thread(this);System.out.println(线程线程 t 为新建!为新建!);System.out.println(线程线程 t 为就绪!为就绪!);t.start();public void run()try System.out.println(线程线程 t 在运行!在运行!);t.sleep(500);System.out.println(线程线程 t 在短时间睡眠后重新运行!在短时间睡眠后重新运行!);catch(InterruptedException IE)System.out.p

13、rintln(线程被中断线程被中断);public static void main(String args)new ThreadStateDemo();1717Thread 类中的重要方法类中的重要方法 2-1方法方法用途用途staticintenumerate(Threadt)将线程所在的线程组及其子组中所有活将线程所在的线程组及其子组中所有活动的线程复制到指定数组中,返回线程动的线程复制到指定数组中,返回线程的个数的个数 finalStringgetName()返回线程的名称返回线程的名称finalbooleanisAlive()如果线程是激活的,则返回如果线程是激活的,则返回 true

14、truefinalvoidsetName(Stringname)将线程的名称设置为由将线程的名称设置为由namename指定的名称指定的名称 finalvoidjoin()throwsInterruptedException等待线程结束等待线程结束 1818Thread 类中的重要方法类中的重要方法 2-2方法方法用途用途finalbooleanisDaemon()检查线程是否为精灵线程检查线程是否为精灵线程 finalvoidsetDaemon(booleanon)根据传入的参数,将线程标记为精灵线程根据传入的参数,将线程标记为精灵线程或用户线程或用户线程staticvoidsleep()用

15、于将线程挂起一段时间用于将线程挂起一段时间voidstart()调用调用run()方法启动线程,开始线程的执行方法启动线程,开始线程的执行staticintactiveCount()返回激活的线程数返回激活的线程数staticvoidyield()使正在使正在执执行的行的线线程程临时暂临时暂停,并允停,并允许许其他其他线线程程执执行行1919线程优先级线程优先级Java 中的线程优先级是在中的线程优先级是在 Thread 类中定义类中定义的常量的常量-NORM_PRIORITY:值为值为 5-MAX_PRIORITY:值为值为 10-MIN_PRIORITY:值为值为 1缺省优先级为缺省优先级

16、为 NORM_PRIORITY有关优先级的方法有两个有关优先级的方法有两个:-final void setPriority(int newp):修改线程的当前优先级修改线程的当前优先级-final int getPriority():返回线程的优先级返回线程的优先级2020线程同步线程同步有时两个或多个线程可能会试图同时访有时两个或多个线程可能会试图同时访问一个资源问一个资源 例如,一个线程可能尝试从一个文件中读取例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据,而另一个线程则尝试在同一文件中修改数据数据在此情况下,数据可能会变得不一致在此情况下,数据可能会变

17、得不一致为了确保在任何时间点一个共享的资源为了确保在任何时间点一个共享的资源只被一个线程使用,使用了只被一个线程使用,使用了“同步同步”2121如何在如何在 Java 中获得同步中获得同步同步基于同步基于“监视器监视器”这一概念。这一概念。“监视器监视器”是用作互斥锁的对象。在给定时刻,只有一是用作互斥锁的对象。在给定时刻,只有一个线程可以拥有监视器。个线程可以拥有监视器。Java中所有的对象都拥有自己的监视器中所有的对象都拥有自己的监视器两种方式实现同步:两种方式实现同步:使用同步方法使用同步方法synchronized void methodA()使用同步块使用同步块synchronize

18、d(object)/要同步的语句要同步的语句2222同步方法同步方法classOnesynchronizedvoiddisplay(intnum)System.out.print(+num);tryThread.sleep(1000);catch(InterruptedExceptione)System.out.println(中断中断);System.out.println(完成完成);进进入入某某一一对对象象的的监监视视器器,就就是是调调用用被被synchronized关关键键字字修修饰的方法。饰的方法。classTwoimplementsRunnableintnumber;Oneone;

19、Threadt;publicTwo(Oneone_num,intn)one=one_num;number=n;t=newThread(this);t.start();publicvoidrun()one.display(number);publicclassSynchpublicstaticvoidmain(Stringargs)Oneone=newOne();intdigit=10;Twos1=newTwo(one,digit+);Twos2=newTwo(one,digit+);Twos3=newTwo(one,digit+);s1.t.join();s2.t.join();s3.t.jo

20、in();2323同步块同步块如如 果果 无无 法法 在在 相相 关关 方方 法法 前前 加加synchronized synchronized 修修饰饰符符,只只需需将将对对这这个个类类定定义义的的方方法法的的调调用用放放入入一一个个synchronized synchronized 块内就可以了。块内就可以了。classOnevoiddisplay(intnum)System.out.print(+num);tryThread.sleep(1000);catch(InterruptedExceptione)System.out.println(中断中断);System.out.printl

21、n(完成完成);classTwoimplementsRunnableintnumber;Oneone;Threadt;publicTwo(Oneone_num,intn)one=one_num;number=n;t=newThread(this);t.start();publicvoidrun()synchronized(one)one.display(number);2424死锁死锁当两个线程循环依赖于一对同步对象时当两个线程循环依赖于一对同步对象时将发生死锁。例如:将发生死锁。例如:一个线程进入对象一个线程进入对象ObjA上的监视器,而另一上的监视器,而另一个线程进入对象个线程进入对象Ob

22、jB上的监视器。如果上的监视器。如果ObjA中中的线程试图调用的线程试图调用ObjB上的任何上的任何 synchronized 方方法,就将发生死锁。法,就将发生死锁。死锁很少发生,但一旦发生就很难调试。死锁很少发生,但一旦发生就很难调试。2525wait-notify 机制机制 2-1为避免轮流检测,为避免轮流检测,Java提供了一个精心设提供了一个精心设计的线程间通信机制,使用计的线程间通信机制,使用wait()、notify()和和notifyAll()方法方法。这些方法是作为这些方法是作为 Object 类中的类中的 final 方法实方法实现的。现的。这三个方法仅在这三个方法仅在 s

23、ynchronized 方法中才能方法中才能被调用。被调用。2626wait-notify 机制机制 2-2wait()方法告知被调用的线程退出监视器并方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的进入等待状态,直到其他线程进入相同的监视器并调用监视器并调用notify()方法。方法。notify()方法通知同一对象上第一个调用方法通知同一对象上第一个调用wait()线程。线程。notifyAll()方法通知调用方法通知调用 wait()的所有线程,的所有线程,具有最高优先级的线程将先运行。具有最高优先级的线程将先运行。2727使用使用wait-notify 机制示例机制

24、示例class ChopStick boolean available;ChopStick()available=true;public synchronized void takeup()while(!available)try wait();System.out.println(哲学家等待另一根筷子哲学家等待另一根筷子);catch(InterruptedException e)available=false;public synchronized void putdown()available=true;notify();2828总结总结 2-1多线程允许程序员编写可最大程度利用多线程允

25、许程序员编写可最大程度利用CPU 的高效程序。的高效程序。Java 以类和接口的形式为多线程提供内置支以类和接口的形式为多线程提供内置支持。持。Java 程序启动时,一个线程立刻运行,该线程序启动时,一个线程立刻运行,该线程称为主线程。程称为主线程。可通过两种方式创建线程:继承可通过两种方式创建线程:继承Thread类、类、实现实现Runnable 接口接口。2929总结总结2-2Thread 类类的有两个构造函数。的有两个构造函数。线程的缺省优先级为线程的缺省优先级为 5。作为后台线程并为其他线程提供服务的线作为后台线程并为其他线程提供服务的线程称为精灵线程。程称为精灵线程。同步是用于确保资源一次只能被一个线程同步是用于确保资源一次只能被一个线程使用的过程。使用的过程。wait-notify机制机制用来处理线程间通信用来处理线程间通信3030

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁