background image

因此,使用多线程是提高程序执行效率的最廉价的方式。
    三、

Java

线程模型

    由于 Java 是纯面向对象语言,因此,Java 的线程模型也是面向对象的。Java 通过
Thread 类将线程所必须的功能都封装了起来。要想建立一个线程,必须要有一个线程执
行函数,这个线程执行函数对应 Thread 类的 run 方法。Thread 类还有一个 start 方法,
这个方法负责建立线程,相当于调用

Windows

建立线程函数 CreateThread.当调用

start 方法后,如果线程建立成功,并自动调用 Thread 类的 run 方法。因此,任何继承
Thread 的 Java 类都可以通过 Thread 类的 start 方法来建立线程。如果想运行自己的线
程执行函数,那就要覆盖 Thread 类的 run 方法。
    在 Java 的线程模型中除了 Thread 类,还有一个标识某个 Java 类是否可作为线程类
的接口 Runnable,这个接口只有一个抽象方法 run,也就是 Java 线程模型的线程执行
函数。因此,一个线程类的唯一标准就是这个类是否实现了 Runnable 接口的 run 方法,
也就是说,拥有线程执行函数的类就是线程类。

从上面可以看出,在 Java 中建立线程有两种方法,一种是继承 Thread 类,另一种是

实现 Runnable 接口,并通过 Thread 和实现 Runnable 的类来建立线程,其实这两种
方法从本质上说是一种方法,即都是通过 Thread 类来建立线程,并运行 run 方法的。
但它们的大区别是通过继承 Thread 类来建立线程,虽然在实现起来更容易,但由于
Java 不支持多继承,因此,这个线程类如果继承了 Thread,就不能再继承其他的类了,
因此,Java 线程模型提供了通过实现 Runnable 接口的方法来建立线程,这样线程类可
以在必要的时候继承和业务有关的类,而不是 Thread 类。

Java 多线程初学者指南(2):用 Thread 类创建线程

  在

Java

创建线程有两种方法:使用 Thread 类和使用 Runnable 接口。在使用

Runnable 接 口 时 需 要 建 立 一 个 Thread 实 例 。 因 此 , 无 论 是 通 过 Thread 类 还 是
Runnable 接口建立线程,都必须建立 Thread 类或它的子类的实例。Thread 类的构造
方法被重载了八次,构造方法如下:

public Thread( );
public Thread(Runnable target);

public Thread(String name);
public Thread(Runnable target, String name);

public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);

public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, Runnable target, String name, long stac

kSize);

    Runnable target
    实现了 Runnable 接口的类的实例。要注意的是 Thread 类也实现了 Runnable 接口,
因此,从 Thread 类继承的类的实例也可以作为 target 传入这个构造方法。
    String name
    线程的名子。这个名子可以在建立 Thread 实例后通过 Thread 类的 setName 方法设
置。如果不设置线程的名子,线程就使用默认的线程名:Thread-N,N 是线程建立的顺
序,是一个不重复的正整数。
    ThreadGroup group
    当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的
线程组中。关于线程组的细节将在后面的章节详细讨论。