定义和启动线程
原文: 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对象所涉及的其他线程调用其他方法。我们将在以下部分中研究其中一些方法。
