欢迎来到天天文库
浏览记录
ID:40010917
大小:313.00 KB
页数:61页
时间:2019-07-17
《《java多线程》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章多线程8.1多线程的概念8.2线程类8.3资源的协调与同步8.4线程间通信8.1多线程的概念程序是一段静态的代码,它是应用软件执行的蓝本。进程就是程序的运行时的一个实例。线程可以看作单独地占有CPU时间来执行相应的代码的。线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。8.1多线程的概念多线程具有以下特点:(1)多个线程在运行时,系统自动在线程之间进行切换;(2)由于多个线程共存于同一块内存,线程之间的通信非常容易;(3)Java将线程视为一个对象。线程要么是Thread类的对象,要么是
2、接口Runnable的对象。(4)当多个线程并行执行时,具有较高优先级的线程将获得较多的CPU时间片;(5)优先级是从0到10的整数,并且它仅表示线程之间的相对关系;(6)多个线程共享一组资源,有可能在运行时产生冲突。必须采用synchronized关键字协调资源,实现线程同步。8.2线程类8.2.1多线程编程中常用的常量和方法8.2.2线程的生命周期8.2.3创建多线程的方法8.2.1多线程编程中常用的常量和方法Thread类包含的常量有:1.publicstaticfinalintMAX_PRIORITY:最大优先级,值是10。2.p
3、ublicstaticfinalintMIN_PRIORITY:最小优先级,值是1。3.publicstaticfinalintNORM_PRIORITY:缺省优先级,值是5。8.2.1多线程编程中常用的常量和方法常用方法:currentThread():返回当前运行的线程对象,是一个静态的方法。sleep(intn):使当前运行的线程睡n个毫秒,然后继续执行,也是静态方法。yield():使当前运行的线程放弃执行,切换到其它线程,是一个静态方法。isAlive():判断线程是否处于执行的状态,返回值true表示处于运行状态,false表
4、示已停止。start():使调用该方法的线程开始执行。run():该方法由start()方法自动调用。8.2.1多线程编程中常用的常量和方法常用方法:stop():使线程停止执行,并退出可执行状态。suspend():使线程暂停执行,不退出可执行态。resume():将暂停的线程继续执行。setName(Strings):赋予线程一个名字。getName():获得调用线程的名字。getPriority():获得调用线程的优先级。setPriority(intp):设置线程的优先级。join():等待线程死亡,若中断了该线程,将抛出异常。【
5、实例8-1】classgetThreadInfo{publicstaticvoidmain(Stringargs[]){Threadcurr;intnum=7;curr=Thread.currentThread();curr.setPriority(num);System.out.println("当前线程:"+curr);System.out.println("线程名:"+curr.getName());System.out.println("优先级:"+curr.getPriority());}}程序输出结果:当前线程:Thread[
6、main,7,main]线程名:main优先级:78.2.2线程的生命周期Java支持一种“抢占式”(preemptive)调度方式“Newborn”(新建)状态:线程在己被创建但未执行这段时间内,处于一个特殊的"Newborn"状态,这时,线程对象己被分配内存空间,其私有数据己被初始化,但该线程还未被调度。此时线程对象可通过start()方法调度,或者利用stop()方法杀死.新创建的线程一旦被调度,就将切换到"Runnable"状态。8.2.2线程的生命周期"Runnable"(就绪)状态:表示线程正等待处理器资源,随时可被调用执行。
7、处于就绪状态的线程事实上己被调度,也就是说,它们己经被放到某一队列等待执行。处于就绪状态的线程何时可真正执行,取决于线程优先级以及队列的当前状况。线程的优先级如果相同,将遵循"先来先服务"的调度原则。8.2.2线程的生命周期“Running”(运行)状态:表明线程正在运行,该线己经拥有了对处理器的控制权,其代码目前正在运行。这个线程将一直运行直到运行完毕,除非运行过程的控制权被一优先级更高的线程强占。8.2.2线程的生命周期“Blocked”(堵塞)状态:一个线程如果处于"Blocked"(堵塞)状态,那么暂时这个线程将无法进入就绪队列。
8、处于堵塞状态的线程通常必须由某些事件才能唤醒。至于是何种事件,则取决于堵塞发生的原因:处于睡眠中的线程必须被堵塞一段固定的时间;被挂起、或处于消息等待状态的线程则必须由一外来事件唤醒。“Dea
此文档下载收益归作者所有