定义和启动线程
创建Thread
实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
- 提供一个
Runnable
对象. Runnableinterface定义一个单一方法run
,旨在包含在线程中执行的代码。Runnable
对象被传递给Thread
构造函数,如HelloRunnable示例所示:
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
- 子类
Thread
.Thread
类本身实现Runnable
,尽管其run
方法不执行任何操作。应用程序可以提供run
的子类Thread
,如HelloThread示例中所示:
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
}
请注意,两个示例都调用Thread.start
来启动新线程。
您应该使用以下哪些习语?使用Runnable
对象的第一个习惯用法更为通用,因为Runnable
对象可以将Thread
以外的其他类作为子类。第二个习惯用法在简单的应用程序中更易于使用,但由于您的任务类必须是Thread
的后代而受到限制。本课重点讨论第一种方法,该方法将Runnable
任务与执行该任务的Thread
对象分开。这种方法不仅更灵活,而且适用于稍后介绍的高级线程 管理API。
Thread
类定义了许多对线程 管理 有用的方法。这些包括static
方法,它们提供有关调用该方法的线程的信息或影响该方法的状态。其他方法是从 管理 线程和Thread
对象所涉及的其他线程中调用的。我们将在以下各节中研究其中一些方法。