欢迎来到天天文库
浏览记录
ID:38816081
大小:327.00 KB
页数:32页
时间:2019-06-19
《面向对象编程导论第八章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、面向对象编程导论授课人:宋东峰第八章线程本讲概要本讲重点线程的概念线程的生命周期Java中多线程的编程继承Thread类与使用Runnable接口Thread类的主要方法线程的同步与死锁4.1线程及相关概念程序:计算机高级语言编写的代码,静态,是应用程序的蓝本。进程:是程序的一次动态执行过程,进程包括所要执行的指令和所需的系统资源,不同的进程所占用的系统资源相对独立。线程:比进程更小的执行单位,自身不能自动运行,必须栖身于某一进程之中,由该进程触发执行,属于同一进程的线程共享该进程的系统资源。多进程:系统中多个
2、程序同时执行(多任务)。多线程:程序(进程)中多个片断同时执行。4.1.1线程及相关概念Java程序执行的过程当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称作“主线程”,该线程负责执行main方法。如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句,JVM就会结束Java应用程序。如果main方法中创建了其他线程,那么JVM就要保证每个线程都有机会使用CPU资源。JVM一直要等到主线程中的所有线程都结束之后,才结束Java应用程序。4.1.2线程的生命周期线程的五个
3、生命周期新建:新建的线程处于新建状态。就绪:在创建线程后,它将处于就绪状态,排队等待进程调用。运行:线程获得CPU资源后,就进入运行状态,开始执行。阻塞:在线程等待一个事件时(例如输入/输出操作),就处于阻塞状态。死亡:线程不再具有继续运行的能力。线程完成了自己的任务。线程被强迫终止。4.1.2线程生命周期示意图新建状态就绪状态阻塞状态运行状态死亡状态4.2基本编程思路例:classAimplementsRunnable{publicvoidrun(){….}//线程所需要执行的代码}classB{public
4、staticvoidmain(String[]arg){Runnablea=newA();Threadt=newThread(a);t.start();//main方法所在线程的执行代码}}4.2线程的优先级和调度调度当一个在就绪队列中排队的线程被分配到处理器资源而进入运行状态之后,这个线程就称为被“调度”或被线程调度管理器选中了。线程调度管理器负责管理线程排队和处理器在线程之间的分配在java系统中,线程调度依据优先级基础上的“先到先服务”原则。4.2.1线程的优先级和调度调度Java虚拟机(JVM)中的线程
5、调度器负责管理线程,调度器把线程的优先级分为10个级别。优先级使用Thread类中的类常量表示。staticintMIN_PRIORITY值为1staticintMAX_PRIORITY值为10staticintNORM_PRIORITY值为5intgetPriority():返回线程的优先级。voidsetPriority(inta)可以设置线程优先级。4.2.2线程的创建创建线程有两种方法继承Thread类实现Runable接口每个Java程序至少有一个叫做主线程的线程Thread类的currentThre
6、ad方法可以获取主线程(或当前线程)。getName方法可以取得主线程(或当前线程)的名字。setName方法可以设置线程的名字。4.2.3线程的创建publicclassmainthread{publicstaticvoidmain(String[]args){Threadthread=Thread.currentThread();System.out.println(thread.getName());thread.setName(“mainthread”);System.out.println(threa
7、d.getName());}}mainmainthread4.3线程的创建继承Thread类常用构造方法:publicThread()publicThread(Stringname)publicThread(Runnabletarget)Threadthread1=newThread();Threadthread2=newThread(“second”);classTestThreadextendsThread{publicTestThread(Stringname){super(name);}…………}Te
8、stThreadthread1=newTestThread(“second”);4.3线程的创建Thread类的常用方法publicvoidstart()调用该方法启动线程,使线程从新建状态转入就绪状态并进入就绪队列。publicvoidrun()Thread类中run()方法体为空,编写Thread类的子类时,需要在子类中覆盖父类的run()方法,该方法中包含了对线程的操作。clas
此文档下载收益归作者所有