文档详情

B09多线程-1.ppt

发布:2017-03-12约1.28万字共61页下载文档
文本预览下载声明
第9章 多线程 9.1 多线程的概念 9.2 线程类 9.3 资源的协调与同步 9.4 线程间通信 9.1 多线程的概念 程序是一段静态的代码,它是应用软件执行的蓝本。进程就是程序的运行时的一个实例。 线程可以看作单独地占有CPU时间来执行相应的代码的。 线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。 9.1 多线程的概念 多线程具有以下特点: (1)多个线程在运行时,系统自动在线程之间进行切换; (2)由于多个线程共存于同一块内存,线程之间的通信非常容易; (3)Java将线程视为一个对象。线程要么是Thread类的对象,要么是接口Runnable的对象。 (4)当多个线程并行执行时,具有较高优先级的线程将获得较多的CPU时间片; (5)优先级是从0到10的整数,并且它仅表示线程之间的相对关系; (6)多个线程共享一组资源,有可能在运行时产生冲突。必须采用synchronized关键字协调资源,实现线程同步。 9.2 线程类 9.2.1 多线程编程中常用的常量和方法 9.2.2 线程的生命周期 9.2.3 创建多线程的方法 9.2.1 多线程编程中常用的常量和方法 Thread类包含的常量有: 1. public static final int MAX_PRIORITY: 最大优先级,值是10。 2. public static final int MIN_PRIORITY: 最小优先级,值是1。 3. public static final int NORM_PRIORITY:缺省优先级,值是5。 9.2.1 多线程编程中常用的常量和方法 常用方法: currentThread :返回当前运行的线程对象,是一个静态的方法。 sleep int n : 使当前运行的线程睡n个毫秒,然后继续执行,也是静态方法。 yield :使当前运行的线程放弃执行,切换到其它线程,是一个静态方法。 isAlive : 判断线程是否处于执行的状态,返回值true表示处于运行状态,false表示已停止。 start :使调用该方法的线程开始执行。 run :该方法由start 方法自动调用。 9.2.1 多线程编程中常用的常量和方法 常用方法: stop :使线程停止执行,并退出可执行状态。 suspend : 使线程暂停执行,不退出可执行态。 resume : 将暂停的线程继续执行。 setName String s :赋予线程一个名字。 getName :获得调用线程的名字。 getPriority :获得调用线程的优先级。 setPriority int p :设置线程的优先级。 join :等待线程死亡,若中断了该线程, 将抛出异常。 【实例8-1】 class getThreadInfo public static void main String args[ ] Thread curr; int num 7; curr Thread.currentThread ; curr.setPriority num ; System.out.println 当前线程: +curr ; System.out.println 线程名: + curr.getName ; System.out.println 优先级 :+ curr.getPriority ; 程序输出结果: 当前线程: Thread[main,7,main] 线程名 : main 优先级 :7 9.2.2 线程的生命周期 Java支持一种“抢占式”(preemptive 调度方式 “Newborn”(新建)状态: 线程在己被创建但未执行这段时间内,处于一个特殊的Newborn状态,这时,线程对象己被分配内存空间,其私有数据己被初始化,但该线程还未被调度。此时线程对象可通过start()方法调度,或者利用stop()方法杀死.新创建的线程一旦被调度,就将切换到Runnable状态。 9.2.2 线程的生命周期 Runnable(就绪)状态: 表示线程正等待处理器资源,随时可被调用执行。处于就绪状态的线程事实上己被调度,也就是说,它们己经被放到某一队列等待执行。处于就绪状态的线程何时可真正执行,取决于线程优先级以及队列的当前状况。线程的优先级如果相同,将遵循先来先服务的调度原则。 9.2.2 线程的生命周期 “Running”(运行)状态: 表明线程正在运行,该线己经拥有了对处理器的控制权,其代码目前正在运行。这个线程将一直运行直到运行完毕,除非运行过程的控制权被一优先级更高的线程强占
显示全部
相似文档