Java程序设计课件第十一章多线程程序设计

上传人:da****ge 文档编号:243096240 上传时间:2024-09-15 格式:PPT 页数:35 大小:505KB
返回 下载 相关 举报
Java程序设计课件第十一章多线程程序设计_第1页
第1页 / 共35页
Java程序设计课件第十一章多线程程序设计_第2页
第2页 / 共35页
Java程序设计课件第十一章多线程程序设计_第3页
第3页 / 共35页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,DavidFu,Java,语言程序设计第十一章 多线程编程,讲授人:傅晓阳 教授,本章课程纲要,线程同步与死锁,创建线程,DavidFu,本课程纲要,线程的调度,线程周期,两种创建线程的方法,创建线程,DavidFu,多任务处理,进程是指一种调到内存中执行的运行程序,有自己的地址空间,;,线程是进程内部单一的一个顺序控制流,基于进程的特点是允许计算机同时运行两个或更多的程序。,基于线程的多任务处理环境中,线程是最小的处理单位。,DavidFu,线程与进程的区别,线程,进程,与其他线程共享一个地址空间,独立的地址空间,线程调用开销少,进程间调用开销大,线程间切换开销少,进程间切换开销大,DavidFu,实现线程的方法,通过以下两种方法创建,Thread,对象:,声明一个,Thread,类的子类,并覆盖,run(),方法。,class,mythread,extends Thread ,public void run( ) ,/*,覆盖该方法*,/,声明一个实现,Runnable,接口的类,并实现,run(),方法。,class,mythread,implements,Runnable,public void run( ) ,/*,实现该方法*,/,DavidFu,继承,Thread,类,线程程序执行代码,public void run( ),启动线程,public void start( ),参见例题,12-1,DavidFu,通过接口,Runnable,构造线程类,类声明形式,public class A extends B implements,Runnable,/ .,public void run( ),/ .,DavidFu,通过接口,Runnable,构造线程类,构造和启动线程的方法,A a = new A( );,Thread t = new,Thread(a,);,t.start,( );,参见例题,12-2,DavidFu,本课程纲要,线程的调度,线程周期,两种创建线程的方法,创建线程,DavidFu,线程周期,运行结束,新生态,就绪态,运行态,等待态,睡眠态,结束态,阻塞态,start,Java,虚拟机调度,退让、中断等,sleep,wait,资源短缺,notify,/,notifyAll,资源就绪,结束睡眠时间到,DavidFu,线程的周期,新建状态(,New,),就绪状态(,Runnable,),运行状态(,Running,),阻塞状态(,Blocked,),终止状态(,Dead,),DavidFu,本课程纲要,线程的调度,线程周期,两种创建线程的方法,创建线程,DavidFu,线程优先级,JAVA,中每个线程都有优先级,.,缺省时,线程继承父进程的优先级,设置优先级的原则,:,占用资源较多的线程优先级设置较低,占用资源较少的线程优先级设置较高,优先级是否起作用还取决于线程所运行的操作系统,.,参见例题,12-3,DavidFu,线程优先级,Java,中的线程优先级是在,Thread,类中定义的常量,NORM_PRIORITY :,值为,5,MAX_PRIORITY :,值为,10,MIN_PRIORITY :,值为,1,缺省优先级为,NORM_PRIORITY,有关优先级的方法有两个:,final void,setPriority(int,newp,) :,修改线程的当前优先级,final,int,getPriority,() :,返回线程的优先级,DavidFu,Thread,类中的重要方法,方法,用途,final String,getName,( ),返回线程的名称,final,boolean,isAlive,(),如果线程是激活的,则返回,true,final void,setName(String,name),将线程的名称设置为由,name,指定的名称,final void join( ) throws,InterruptedException,等待线程结束,DavidFu,Thread,类中的重要方法,方法,用途,final,boolean,isDaemon,( ),检查线程是否为守护线程,final void,setDaemon(boolean,on),根据传入的参数,将线程标记为守护线程或用户线程,static void sleep( ),用于将线程挂起一段时间,void start( ),调用,run( ),方法启动线程,开始线程的执行,static,int,activeCount,( ),返回激活的线程数,static void yield(),使正在执行的线程临时暂停,并允许其他执行,DavidFu,线程的常用控制方法,Thread.sleep,(),:表示线程暂时停止运行一段时间,在这段时间内线程处于阻塞状态,将不能运行,当休眠时间结束后,线程将进入可运行状态。,join(),方法:如果线程的语句中调用了,join,方法,那么当前线程一定要等待调用,join,的线程运行完了才会运行。,.,Thread.yield,(),方法 :当前线程调用该方法后将放弃运行状态,给其它优先级相同的、处在可运行状态的线程运行的机会。,参见例题,12-3,和,12-4,DavidFu,本章课程纲要,线程同步与死锁,创建线程,DavidFu,本课程纲要,对象锁,线程同步块,线程同步方法,线程同步和死锁,线程死锁处理,DavidFu,为何需要线程同步,多线程程序需要在线程中共享公共资源,线程之间会并发工作,线程需要协调工作来避免随机并发工作带来的问题,线程同步处理可以使线程协调工作。,DavidFu,线程同步与异步的区别,DavidFu,如何在,Java,中获得同步,两种方式实现同步:,使用同步方法,synchronized void,methodA,() ,使用同步块,synchronized(object,) ,/,要同步的语句,DavidFu,本课程纲要,对象锁,线程同步块,线程同步方法,线程同步和死锁,线程死锁处理,DavidFu,使用同步方法,class One ,synchronized void,display(int,num) ,System.out.print(+num);,try ,Thread.sleep(1000);,catch(InterruptedException,e) ,System.out.println,(,中断,);,System.out.println,(,完成,);,DavidFu,使用同步方法,class Two implements,Runnable,int,number;,One one;,Thread t;,public Two(One one_num,int,n) ,one=one_num; number=n;,t=new Thread(this);,t.start();,public void run() ,one.display(number);,DavidFu,本课程纲要,对象锁,线程同步块,线程同步方法,线程同步和死锁,线程死锁处理,DavidFu,使用同步块,class One ,void,display(int,num) ,System.out.print(+num);,try ,Thread.sleep(1000);,catch(InterruptedException,e),System.out.println,(,中断,);,System.out.println,(,完成,);,DavidFu,使用同步块,class Two implements,Runnable,int,number;,One one;,Thread t;,public Two(One,one_num,int,n) ,one=one_num; number=n;,t=new Thread(this); t.start();,public void run() ,synchronized(one) ,one.display(number);,DavidFu,本课程纲要,对象锁,线程同步块,线程同步方法,线程同步和死锁,线程死锁处理,DavidFu,对象锁,当想保护一些资源不被多个线程同时访问,可以强制通过,synchronized,方法访问那些资源。因为线程一旦访问了,synchronized,方法,对象就进入了“锁定状态”。,参见例题,12-7,DavidFu,处理多线程同步的几个方法,void wait(),:使线程进入等待状态,直至得到通知为止。,void notify(),:撤销因调用对象的,wait,方法导致线程进入的阻塞状态,唤醒它进入可运行状态。,void,notifyAll,(),:唤醒所有因调用对象的,wait,方法处于阻塞状态的线程。,参见例题,12-8,DavidFu,本课程纲要,对象锁,线程同步块,线程同步方法,线程同步和死锁,线程死锁处理,DavidFu,线程死锁处理,当两个线程循环依赖于一对同步对象时将发生死锁。例如:,线程同步机制唤醒一个排斥的“锁”,只有当前获得锁的那个线程能够执行同步代码,.,当两个或多个线程都在等待需要的锁时,而这个锁却正在被另一个也在等待的线程占有,死锁就产生了,.,死锁很少发生,但一旦发生就很难调试。,参见例题,12-8,DavidFu,第十二章结束,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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