Java多线程机制实现及其的应用.docVIP

  • 3
  • 0
  • 约4.86千字
  • 约 10页
  • 2018-10-11 发布于福建
  • 举报
Java多线程机制实现及其的应用

Java多线程机制实现及其的应用   [摘 要]本文就如何实现Java 的多线程、线程调度模式、同步互斥机制以及内置多线程功能进行了深入的探讨,并对线程的状态、创建和控制方法以及避免死锁的方法作了归纳总结,指出了线程实际应用领域以及在编程时应注意的事项。   [关键词]多线程 线程调度 同步机制 死锁   作者简介:闻丽华(1969-),女,大连水产学院职业技术学院 计算机系讲师 工程硕士学位。      引入线程是十分必要的,线程共享相同的地址空间并共同构成一个大的进程,所以同一进程中的线程间的通讯是非常简单而有效的,上下文切换非常快并且是整个大程序的一部分切换。线程仅是过程调用,它们彼此独立执行,线程使得在一个应用程序中同时使用多个线程来完成不同的任务,程序的编写更加自由和丰富,可以大大简化应用程序设计。如果要一程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。多线程可以增进程序的交互性, 提供更好功能、更好的GUI 和更好的服务器功能。   Java 在两方面支持多线程,一方面,Java 环境本身就是多线程的,若干个系统线程运行负责必要的无用单元回收, 系统维护等系统级操作;另一方面,Java 语言内置多线程控制, 可以大大简化多线程应用程序开发。      一、Java 中如何实现多线程   Java 的多线程机制使得在一个程序里可同时执行多个任务。 只有在多CPU 的计算机或者在网络计算体系结构下,将Java 程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。   (一)Java多线程实现方法   Java 采用两种途径实现多线程机制:一种是应用程序的并发运行对象直接继承Thread 类,另外一种是定义并发执行对象实现Runnable 接口。   1.用Thread 类创建线程   Java的线程是通过java.lang.Thread类来控制的,一个Thread类的对象代表一个线程。当编写Thread 类的子类时,在子类中重写父类的run()方法,该方法中包含了线程的操作,这样的程序需要建立自己的线程时,只需要创建一个已定义好的Thread 子类的实例就可以了,当创建的线程需要调用start()方法开始运行时,run()方法将被自动执行。   2.使用Runnable 接口创建多线程   通过实现Runnable 作为一个目标对象,用Runnable 目标对象初始化Thread 类,提供run()方法,实现的同时还可以继承其他类,可以避免由单继承的局限。几乎所有的线程都可以用Runnable 接口。当线程被构造时, 需要的代码和数据通过一个对象作为构造函数实参传递进去, 这个对象就是实现了Runnable接口的类的实例。   3.两种方法的对比分析   直接继承Thread 类的方法不能再从其他类继承,编写简单,可以直接操作线程;实现Runnable 接口的方法适合多个相同程序代码的线程去处理同一资源的情况,可以避免由于Java单继承特性带来的局限。两者的重要区别在于启动多线程对象的设计方法不同。在具体应用中,采用哪种方法来构造线程要视情况而定。事实上,几乎所有多线程应用都可用第二种方式,即实现Runnable接口。   (二)线程的状态控制   线程包括四个状态:new (开始),running (运行),wait (等候)和done(结束)。当线程被创建并还未运行时, 线程处于new 状态, 在这个状态下,线程不能运行。对于新创建的线程,调用start 方法之后, 会自动调用start 方法,这时线程进入就绪状态。在程序之间用某种方法把处理器的执行时间分成时间片, 位于就绪状态的每个线程都是能运行的,但在某一时刻, 系统处理器只能运行一个线程。由于某些原因, 线程可以被临时暂停进入等候状态。处于这种状态的线程,对于用户来讲仍然有效,仍然可以重新进入就绪状态。当线程因不再需要而进入结束状态时,线程就不能再被恢复和执行。   (三)线程的调度机制   为了控制线程的运行,Java定义了线程调度器来监控系统中处于就绪状态的所有线程。 线程调度器按照线程的优先级决定那个线程投入处理器运行,在多个线程处于就绪状态的条件下,具有高优先级的线程会在低优先级线程之前得到执行,线程调度器同样采用“抢占式”策略来调度线程执行,即当前线程执行过程中有较高优先级的线程进入就绪状态,则高优先级的线程立即被调度执行,具有相同优先级的所有线程采用轮转的方式来共同分配CPU 时间片。   线程调度的意义在于避免多个线程争用有限资源而导致应用系统死机或者崩溃。Java

文档评论(0)

1亿VIP精品文档

相关文档