Java语言程序设计-第14章

上传人:痛*** 文档编号:244593700 上传时间:2024-10-05 格式:PPT 页数:22 大小:187.50KB
返回 下载 相关 举报
Java语言程序设计-第14章_第1页
第1页 / 共22页
Java语言程序设计-第14章_第2页
第2页 / 共22页
Java语言程序设计-第14章_第3页
第3页 / 共22页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第十四章,多线程,一、,Java,的多线程机制,多线程机制是,Java,语言的又一重要特征,使用多线程技术可以使系统同时运行多个执行体,这样可以加快程序的响应时间,提高计算机资源的利用率。使用多线程技术可以提高整个应用系统的性能。,线程的生命周期,每个,Java,程序都有一个主线程,即,main,方法对应的线程。要实现多线程,必须在主线程中创建新的线程。在,Java,语言中,线程用,Thread,类及其子类的对象来表示。每个线程要经历由“新生,就绪,运行,阻塞,死亡”,5,种状态,线程从新生到死亡的状态变化过程称为生命周期。,线程的生命周期,新建,就绪,阻塞,运行,死亡,新生状态,用,new,关键字和,Thread,类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用,start,方法进入就绪状态。,就绪状态,处于就绪状态的线程已经具备了运行条件,但还没有分配到,CPU,,,因而将进入线程队列,等待系统为其分配,CPU,。,一旦获得,CPU,,,线程就进入运行状态并自动调用自己的,run,方法。,运行状态,在运行状态的线程执行自己的,run,方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。,阻塞状态,处于运行状态的线程在某些情况下,如执行了,sleep,(,睡眠)方法,或等待,I/O,设备等资源,将让出,CPU,并暂时终止自己的运行,进入阻塞状态。,在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的,I/O,设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,CPU,资源。当再次获得,CPU,时,便从原来终止位置开始继续运行。,死亡状态,死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它的全部工作;另一个是线程被强制性地终止,如通过执行,stop,或,destroy,方法来终止一个线程。,多线程的实现方法,在,Java,中,创建线程的方法有两种:,方法是通过创建,Thread,类的子类来实现;,另一种方法是通过实现,Runable,接口的类来实现。,二、通过,Thread,类实现多线程,通过继承,Thread,类实现多线程的方法是首先设计,Thread,的子类,然后根据工作需要重新设计线程的,run,方法,再使用,start,方法启动线程,将执行权转交到,run,。,Java,实例,通过,Thread,类,class Thread1 extends Thread,String s;,int,m,count=0;,Thread1(String,ss,int,mm),s=,ss,;,m=mm;,public void run(),try,while(true),System.out.print(s);,sleep(m);,count+,;,Java,实例,(续),if(count=20)break;,System.out.,println,(s+finished!);,catch(,InterruptedException,e),return;,public static void main(String,args,),Thread1,threadA,=new Thread1(A ,50);,Thread1,threadB,=new Thread1(B ,100);,threadA,.start();,threadB,.start();,三、通过,Runable,接口实现多线程,通过,Runable,接口实现多线程的方法:,设计一个实现,Runable,接口的类,然后根据工作需要重新设计线程,的,run,方法;,建立该类的对象,以此对象为参数建立,Thread,类的对象;,调用,Thread,类对象的,start,方法启动线程,将执行权转交到,run,方法。,Java,实例,通过,Runable,接口,class Thread2 implements,Runnable,String s;,int,m,count=0;,Thread2(String,ss,int,mm),s=,ss,;,m=mm;,public void run(),try,while(true),System.out.print(s);,Thread.sleep(m);,if(+count=20)break;,Java,实例,(续),System.out.,println,(s+has finished!);,catch(,InterruptedException,e)return;,public static void main(String,args,),Thread2,threadA,=new Thread2(A ,50);,Thread2,threadB,=new Thread2(B ,100);,Thread,threadC,=new Thread(,threadA,);,Thread,threadD,=new Thread(,threadB,);,threadC,.start();,threadD,.start();,四、,线程等待,Java,程序中的线程并发运行,共同争抢,CPU,资源。哪个线程抢夺到,CPU,资源后,就开始运行。,线程的调度执行是按照其优先级高低的顺序进行的,为了防止高级线程未完成,低级线程没有机会获得,CPU,,,使低级线程有机会执行,那么让高级线程暂时休眠一段时间,使用,sleep(),方法,休眠时间的长短由,sleep(),方法中的参数决定。,Java,实例,线程等待,class Thread3 extends Thread,String s;,int,m,i=0;,Thread3(String,ss,),s=,ss,;,public void run(),try,for(i=0;i6;i+),sleep(,int,)(500*Math.random();,System.out.,println,(s);,Java,实例,(续),System.out.,println,(s+finished!);,catch(,InterruptedException,e),return;,public static void main(String,args,),Thread3,threadA,=new Thread3(A );,Thread3,threadB,=new Thread3(B );,threadA,.start();,threadB,.start();,System.out.,println,(main is finished);,五、线程同步,Java,提供了多线程机制,通过多线程的并发运行可以提高系统资源利用率,改善系统性能。但在有些情况下,一个线程必须和其他线程合作才能共同完成任务。线程可以共享内存,利用这个特点可以在线程之间传递信息。,在,Java,中,实现同步操作的方法是在共享内存变量的方法前加,synchronized,修饰符。在程序运行过程中,如果某一线程调用经,synchronized,修饰的方法,在该线程结束此方法的运行之前,其他所有线程都不能运行该方法,只有等该线程完成此方法的运行后,其他线程才能引入该方法的运行。,Java,实例,线程同步,class,Cbank,private static,int,s=2000;,public synchronized static void sub(,int,m),int,temp=s;,temp=temp-m;,try,Thread.sleep(,int,)(1000*Math.random();,catch(,InterruptedException,e),s=temp;,System.out.,println,(s=+s);,Java,实例,(续),class Customer extends Thread,public void run(),for(,int,i=1;i=4;i+),Cbank,.sub(100);,public class Thread5,public static void main(String,args,),Customer customer1=new Customer();,Customer customer2=new Customer();,customer1.start();,customer2.start();,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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