定义和启动线程
原文: https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
创建Thread
实例的应用程序必须提供将在该线程中运行的代码。有两种方法可以做到这一点:
提供
Runnable
对象。Runnable
接口定义了一个方法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
方法什么都不做。应用程序可以子类化Thread
,提供自己的run
实现,如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
对象所涉及的其他线程调用其他方法。我们将在以下部分中研究其中一些方法。