`
筱爪哇
  • 浏览: 4748 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

多线程的两种实现方法

 
阅读更多
    多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
     在java中要想实现多线程,有两种方法,一种是继承Thread类,另外一种是实现Runable接口。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。多线程的目的是为了最大限度的利用CPU资源。
    程序中继承Thread类时调用的是start()方法,但是实际上调用的还是run()方法的主体。为什么我们不能直接调用run()方法呢?因为线程的运行需要本地操作系统的支持。查看start的源代码的时候,会发现调用的是start0(),并且这个这个方法用了native关键字,此关键字表示调用本地操作系统的函数,因为多线程的实现需要本地操作系统的支持。
    实现Runnable接口,class 类名 implements Runnable{}。Thread和Runnable的区别,首先如果一个类继承Thread,则不适合资源共享,但是如果实现了Runable接口的话,则很容易的实现资源共享。其次,其实Thread也是实现Runnable接口的,class Thread implements Runnable{},Thread中的run方法调用的是Runnable接口的run方法,Thread和Runnable都实现了run方法。当使用 runnable 接口时,您不能直接创建所需类的对象并运行它;必须从 Thread 类的一个实例内部运行它。许多程序员更喜欢 runnable 接口,因为Java多线程编程从 Thread 类继承会强加类层次。

    实现Runnable接口比继承Thread类所具有的优点
             1.适合多个相同的程序代码的线程去处理同一个资源
             2.可以避免java中的单继承的限制
             3.增加程序的健壮性,代码可以被多个线程共享,代码和数据独立[/align]
分享到:
评论

相关推荐

    多线程两种实现方式Java

    本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...

    Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。

    ### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...

    java多线程的两种实现

    在Java中,有两种主要的实现多线程的方式:通过`Thread`类和通过实现`Runnable`接口。 1. **通过`Thread`类实现多线程** 当我们创建一个`Thread`类的子类时,可以重写`run()`方法来定义线程执行的任务。例如: ``...

    Java多线程技术 线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口

    本文将详细介绍Java多线程的基本概念、线程的生命期、线程的状态转换、线程调度原则以及如何实现线程的两种常见方式。 #### 二、线程的相关概念 **1. 进程与线程的区别** - **进程**:是一个正在执行的程序实例,...

    易语言多线程传递文本参数两种方法

    在编程领域,多线程是实现并发执行任务的重要手段,特别是在处理大量数据或者需要同时进行多个操作时。易语言作为一款中国本土的编程环境,它提供了丰富的语法支持来实现多线程。本篇文章将深入探讨如何在易语言中...

    Java中有两种实现多线程的方式以及两种方式之间的区别

    Java中有两种实现多线程的方式。一是直接继承Thread类,二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢?  为了回答这个问题,我们可以通过编写一段代码来进行分析。我们用代码来模拟铁路...

    可并行递归算法的递归多线程实现

    多线程编程作为一种提高程序并发性和性能的技术,尤其在并行处理领域展现出巨大潜力。在并行处理中,多线程能够充分利用现代多核处理器的能力,通过同时执行多个线程来加速计算过程。本文旨在探讨如何在递归算法中...

    Qt两种方法实现多线程并安全结束线程及QMutex加锁Qt单例化实现

    在Qt框架中,多线程的应用是常见的性能优化手段,特别是在UI更新和后台处理分离时。本主题将详细探讨如何使用Qt的QThread类来创建和管理线程,并且安全地结束线程,同时结合QMutex进行线程同步,以及如何实现Qt的...

    vb多线程控件能实现简单的多线程

    VB中的多线程主要通过两种方式实现:MTA(多线程 apartments)和STA(单线程 apartments)。VB6默认使用STA模型,这意味着每个窗口对象(如控件)都在一个单独的线程中运行。而MTA则允许多个线程共享同一公寓,适合...

    C++实现多线程文件复制.docx

    在给定的代码中,使用了两种方法实现多线程文件复制: 1. 使用CFile类复制文件 在第一个代码块中,使用CFile类复制文件。CFile类提供了Read和Write方法,用于读取和写入文件。通过使用多个线程,每个线程负责复制...

    易语言多线程传递文本参数两种方法源码

    易语言多线程传递文本参数是开发中常常遇到的问题,下面将详细介绍两种常见的方法。 **方法一:使用全局变量** 易语言中,全局变量可以在程序的不同线程间共享数据,因此可以用来传递参数。这种方式简单直接,但...

    实现Runnable接口创建多线程.docx

    在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...

    VB多线程组件,实现稳定多线程调用

    文件名“mthreadvb”可能是组件的主库文件,包含了实现VB多线程功能的类和方法。在实际使用中,我们需要将这个DLL文件添加到VB项目中作为引用,然后就可以利用提供的API来创建和管理线程,执行并发任务。 为了使用...

    java多线程实现月食

    Java提供了内置的多线程支持,主要通过两种方式:继承Thread类或实现Runnable接口。在这个项目中,可能采用了实现Runnable接口的方法,因为这样可以避免单继承的限制,提高代码的复用性。 要实现流星和月食的效果,...

    java用线程的两种实现方式设计四个线程两次对J加1两次对J减1

    Java 语言提供了多种方式来实现多线程编程,今天我们将讨论其中的两种实现方式,并使用四个线程来演示对变量 J 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...

    多线程实现的五种不同排序

    在本资源中,"多线程实现的五种不同排序"提供了VC++(Visual C++)源码,这对于学习多线程编程以及数据结构排序的初学者来说是一个很好的实践材料。下面将详细介绍这五个不同的排序算法及其在多线程环境下的实现。 ...

    java多线程应用实现方法

    另一种实现多线程的方法是创建一个实现Runnable接口的类,并在`run()`方法中定义线程的行为。这种方式更为灵活,因为Java类只能直接继承一个父类,但可以实现多个接口。通过将Runnable对象传递给Thread构造函数,...

    Visual Basic 6.0建立多线程程序就是这么简单

    另一种实现多线程的方法是利用VB6内置的Timer控件。虽然这不是真正的多线程实现,但可以达到类似的效果,尤其适用于简单的并发任务处理。 ```vb ' 方法2:使用多个timer控件模拟多线程 Private Sub Command2_Click...

    VC++多线程实现三种排序算法比较----冒泡排序、快速排序、归并排序

    本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...

    java 多线程的几种实现方法总结

    Java 中有两种实现多线程的方法:继承 Thread 类和实现 Runnable 接口。继承 Thread 类可以使子类继承 Thread 类的所有方法和变量,并可以覆盖 Thread 类的 run 方法以实现自己的线程执行逻辑。实现 Runnable 接口...

Global site tag (gtag.js) - Google Analytics