Java线程(上)

上传人:da****ge 文档编号:243096242 上传时间:2024-09-15 格式:PPT 页数:23 大小:155.50KB
返回 下载 相关 举报
Java线程(上)_第1页
第1页 / 共23页
Java线程(上)_第2页
第2页 / 共23页
Java线程(上)_第3页
第3页 / 共23页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java,线程(上),目标,了解线程概念,了解线程模型,掌握线程创建与启动,理解线程状态,掌握线程的调度方法,多线程基本概念,多进程:在操作系统中能(同时)运行多个任务,(,程序,),多线程:在同一应用程序中有多个顺序流(同时)执行,多线程基本概念,Java,线程模型,虚拟的,CPU,,由,java.lang.Thread,类封装和虚拟,CPU,来实现。,CPU,所执行的代码,传递给,Thread,类对象。,CPU,所处理的数据,传递给,Thread,类对象。,代 码,数 据,虚拟,CPU,Java,线程模型,创建线程,方式:,定义一个线程类,它继承类,Thread,并重写其中的方法,run( ),,方法,run( ),称为线程体;,由于,Java,只支持单继承,用这种方法定义的类不能再继承其他类。,方式,示例,public class,TestThread,extends,Thread,public void,run,(),for(int,i = 0;i100;i+),System.out.println(Count:+i,);,public static void main(String,args,),TestThread,tt,= new,TestThread,();,/,注意,不要直接调用,run,方法,tt.,start,();,创建线程,方式:,提供一个实现接口,Runnable,的类作为线程的目标对象,在初始化一个,Thread,类或者,Thread,子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体,方式,示例,public class,RunnableThread,implements,Runnable,/,实现接口,Runnable,中的,run,方法,public void,run,(),for (,int,k = 0;k10;k+),System.out.println(Count:+k,);,public static void,main(String,args,),RunnableThread,rt,=new,RunnableThread,();,Thread t=new,Thread(,rt,);,t.start,();,两种线程创建方式的比较,使用,Runnable,接口,可以将,CPU,,,代码和数据分开,形成清晰的模型;,还可以从其他类继承;,保持程序风格的一致性。,直接继承,Thread,类,不能再从其他类继承;,编写简单,可以直接操纵线程,无需使用,Thread.currentThread,(),。,线程状态,Runnable,Running,Blocked,New,start(),run(),运行完毕,线程调度,阻塞事件,解除阻塞,Dead,线程状态,创建状态(,new Thread,),当创建了一个新的线程时(,MyThread,thd,= new,MyThread,();,),它就处于创建状态,此时它仅仅是一个空的线程对象,系统不为它分配资源。处于这种状态时只能启动或终止该线程,调用除这两种以外的其它方法都会失败并且会引起非法状态异常,IllegalThreadStateException,线程状态,可运行状态(,Runnable,),当线程处于创建状态时,可以调用,start(),方法(,thd.start,();,)来,启动,它,产生运行这个线程所需的系统资源,安排其运行,并调用线程体,run(),方法,这样就使得该线程处于可运行,(,Runnable,),状态。,线程状态,不可运行状态(,Not,Runnable,),线程处于可运行状态时,当下面四种情况发生,线程就进入不可运行状态:,调用了,sleep(),方法;,调用了,suspend(),方法;,为等候一个条件变量,线程调用,wait(),方法;,输入输出流中发生线程阻塞。,线程状态,死亡状态(,Dead,),线程终止的两种方法,自然撤消,自然撤消是指从线程的,run(),方法正常退出;,强制停止,调用线程的实例方法,stop(),可强制停止当前线程。,如果希望线程正常终止,可采用标记来使线程中的,run(),方法退出。,线程状态示例,for(int,i=0; i30; i+),if(i%10=0 & i!=0),try ,System.out.println(“Before,sleeping”+Thread.currentThread().,isAlive,();,Thread.,sleep,(2000);,System.out.println(“After,sleeping”+Thread.currentThread().,isAlive,();,catch(InterruptedException,e) ,e.printStackTrace,();,System.out.println(No,. + i);,守护线程,守护线程(,daemon,Thread,),是为其它线程提供服务的线程,守护线程一般应该是一个独立的线程,它的,run(),方法是一个无限循环,.,守护线程与其它线程的区别是,如果守护线程是唯一运行着的线程,程序会自动退出,线程的简单控制,测试线程是否正处于,Runnable,状态,isAlive,(),中断线程,Thread.sleep(),Thread.yield(),设置线程的优先级,getPriority,(),setPriority,(),线程优先级示例,class,ThreadTest,public static void main( String,args, ) ,Thread t1 = new MyThread(T1);,t1,.setPriority(,Thread.MIN_PRIORITY,);,t1.start( );,Thread t2 = new MyThread(T2);,t2,.setPriority(,Thread.MAX_PRIORITY,);,t2.start( );,Thread t3 = new MyThread(T3);,t3,.setPriority(,Thread.MAX_PRIORITY,);,t3.start( );,class,MyThread,extends Thread ,String message;,MyThread,( String message ) ,this.message,= message;,public void run() ,for (,int,i=0; i3; i+ ),System.out.println,( message+,“,+,getPriority,() );,线程的,join,方法,Thread API,包含了等待另一个线程完成的方法:,join(),方法。当调用,Thread.join(),时,调用线程将阻塞,直到被,join,方法加入的目标线程完成为止。,Thread.join(),通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。,join,方法示例,JoinThread,r = new,JoinThread,();,Thread t = new,Thread(r,);,t.start,();,try,t.join,();,catch(InterruptedException,e),线程控制有关方法,方法,说明,start(),新建的线程进入,Runnable,状态,run(),线程进入,Running,状态,wait(),线程进入等待状态,等待被,notify,,,这是一个对象方法,而不是线程方法,notify()/,notifyAll,(),唤醒其他的线程,这是一个对象方法,而不是线程方法,yield(),线程放弃执行,使其他优先级不低于此线程的线程有机会运行,它是一个静态方法,getPriority()/setPriority,(),获得,/,设置线程优先级,suspend(),挂起该线程,,Deprecated,,,不推荐使用,resume(),唤醒该线程,与,suspend,相对,,Deprecated,,,不推荐使用,sleep(),线程,睡眠指定的一段时间,join(),调用这个方法的主线程,会等待加入的子线程完成,总结,线程概念,线程模型,线程创建与启动,线程状态,sleep(),、,yield (),、,join (),方法,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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