Logo
Section 1 / 49

设置线程

本课讨论如何在 Java 中创建线程。

导入

设置线程

本课讨论如何在 Java 中创建线程。

创建线程

要使用线程,首先需要创建它们。在 Java 语言框架中,有多种方式可以设置和启动线程。

实现 Runnable 接口

创建线程时,需要为该线程提供要执行的代码,换句话说,就是告诉线程需要执行什么任务。这些代码可以通过实现 Runnable 接口的类的对象来提供。顾名思义,该接口要求实现类必须提供一个 run 方法,当线程启动时,就会调用这个方法。

Runnable 接口是 Java 中表示逻辑任务的基本抽象。

1class Demonstration { 2 public static void main( String args[] ) { 3 Thread t = new Thread(new Runnable() { 4 5 public void run() { 6 System.out.println("Say Hello"); 7 } 8 }); 9 t.start(); 10 } 11}

我们在 Thread 类的构造函数中定义了一个匿名类,并将其实例化后传递给 Thread 对象。个人认为匿名类会降低代码可读性,因此更推荐单独创建一个类来实现 Runnable 接口,然后将该类的实例传入 Thread 构造函数中。下面展示这种做法:

1class Demonstration { 2 public static void main( String args[] ) { 3 4 ExecuteMe executeMe = new ExecuteMe(); 5 Thread t = new Thread(executeMe); 6 t.start(); 7 } 8} 9 10class ExecuteMe implements Runnable { 11 12 public void run() { 13 System.out.println("Say Hello"); 14 } 15 16}

继承 Thread 类

第二种设置线程的方式是直接继承 Thread 类,如下所示。

1class Demonstration { 2 public static void main( String args[] ) throws Exception { 3 ExecuteMe executeMe = new ExecuteMe(); 4 executeMe.start(); 5 executeMe.join(); 6 7 } 8} 9 10class ExecuteMe extends Thread { 11 12 @Override 13 public void run() { 14 System.out.println("I ran after extending Thread class"); 15 } 16 17}

第二种方法的缺点是必须继承 Thread 类,这限制了代码的灵活性,因为 Java 不支持多继承,导致无法再继承其他父类。因此,在大多数情况下,将实现了 Runnable 接口的类对象作为参数传入 Thread 更为合适。

面试之外

基础线程处理