java线程与多线程处理.pptVIP

  • 2
  • 0
  • 约2.49千字
  • 约 21页
  • 2019-04-15 发布于江西
  • 举报
* * * * * * * * * * * * * 线程与多线程操作 我如何使我的程序执行多个任务? * 本节主要内容 线程概述 Java中的线程 程序进程与线程 线程的状态和生命周期 线程的调度和优先级 Java的线程类与Runnable接口 如何在程序中实现多线程 创建Thread类的子类 实现Runnable接口 * CPU的访问机制(片选机制) 打印机 浏览器 声卡 CPU 控制线Control BUS 内存 * 线程概述 以往我们开发的程序大多是单线程的,即一个程序只有从头至尾的一条执行线路。 然而有些程序需要多种途径同时运作,比如:服务器同时处理多个客户机的请求。 多线程指同时存在几个执行体,按几种不同的执行线路共同工作的情况。 * Java中的线程 程序、进程和线程 程序是一段静态的代码,它是应用程序执行的蓝本。 进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。作为蓝本的程序可以被多次加载到系统的不同内存区域分别执行,形成不同的进程。 线程是进程内部单一的一个顺序控制流。 一个进程在执行过程中,可以产生多个线程。每个线程也有自己产生、存在和消亡的过程。 * 线程的状态和生命周期 每个Java程序都有一个缺省的主线程,对于Application,主线程是main()方法的执行线索;对于Applet,主线程是指挥浏览器加载并执行Java小程序。 要想实现多线程,就要在主线程中创建新的线程对象。 Java使用Thread类及其子类表示线程。新建的线程在它的一个完成生命周期中通常要经历五种状态。 * 线程的五种状态 新建 就绪 运行 阻塞 死亡 * 线程生命周期示意图 新建 死亡 运行 就绪 阻塞 * 线程的调度与优先级 处在就绪状态下的线程,可能有多个,它们各自的任务轻重缓急有所不同。 Java系统为各种线程制定了一个优先级,优先级较高的现成可以排列在等待队列的前面,先执行。同一优先级的现成,采取先进先出的原则。 这个根据线程优先级调度线程的工作由Java的线程调度管理器自动完成。 * Java线程类与Runnable接口 Java中编程实现多线程有两种方式: 创建自己的线程子类 在自己的用户类中实现Runnable接口。 两种方法都要使用到Java基础类中的Tread类及其方法。 * Runnable接口 Runnable接口只有一个方法run(),所有实现Runnabel接口的用户类都必须具体实现这个run()方法,为它书写具体的方法体并定义具体操作。 run()方法比较特殊,它可以被系统自动识别并执行。 多线程应用的实质就是在主线程之外,定义了一个或多个新的线程。 * Tread类 Tread类综合了Java程序中一个线程所需要拥有的属性和方法,主要有: 构造函数 线程优先级 其他一些主要方法。 * 构造函数 Thread类有多种构造函数,所对应的操作有三种: public Thread():创建一个系统线程类对象; public Thread(Runnable target):在上一个构造函数的基础上,利用参数对象——实现了Runnable接口的target对象中所定义的run()方法,来初始化。 Public Thread(String TreadName):在第一个构造函数的基础上,为所创建的线程指定一个名字。 Public Thread(Runnable target,String ThreadName):实现第2、3两种构造函数的功能。 * 线程优先级 Thread类有三个关于优先级的静态常量: MIN_PRIORITY=1 MAX_ PRIORITY=10 NORM_ PRIORITY=5 对应于一个新线程,系统会遵循以下原则: 新线程将继承创建它的父线程的优先级。 一般情况下,线程具有普通优先级。 用户可以通过setPriority()方法来修改优先级。 * 其他主要方法 start()方法:启动线程,使线程有新建状态转为就绪状态; run()方法:定义该线程的操作; sleep()方法:使线程暂时进入到休眠状态。 sleep(int millsecond):以毫秒为单位时间; * 在程序中实现多线程 无论采取前面描述的哪种途径,程序员可以控制的关键性操作有两个: 定义用户线程的操作,即定义用户线程的run()方法; 在适当的时候建立用户线程实例。 下面我们将就两种途径,分别作探讨: * 途径一:创建Thread子类 例: 14-1 Mathine.java * 线程的基本控制 终止一个线程 当一个线程结束运行并终止时,它就不能再运行了。 如:r.stop (); 方法用来确定一个线程是否仍是活的。 isAlive() 获取对当前线程的

文档评论(0)

1亿VIP精品文档

相关文档