继承Thread类
创建一个继承自`Thread`类的子类。
在子类中重写`run()`方法,该方法定义了线程的执行逻辑。
创建子类对象并调用`start()`方法启动线程。
public class MyThread extends Thread {@Overridepublic void run() {// 线程执行的逻辑}}
实现Runnable接口
创建一个实现`Runnable`接口的类。
在类中实现`Runnable`接口的`run()`方法,定义线程的执行逻辑。
创建`Runnable`实现类的对象,并将其传递给`Thread`类的构造方法。
调用`Thread`对象的`start()`方法启动线程。
public class MyRunnable implements Runnable {@Overridepublic void run() {// 线程执行的逻辑}}// 使用Runnable实现类创建线程MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();
使用匿名内部类
可以创建`Runnable`的匿名内部类对象。
将匿名内部类对象传递给`Thread`类的构造方法。
调用`Thread`对象的`start()`方法启动线程。
// 使用匿名内部类创建线程Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 线程执行的逻辑}});thread.start();
实现Callable接口
`Callable`接口与`Runnable`类似,但`Callable`的`run()`方法可以返回结果,并且可以抛出异常。
使用`FutureTask`类可以配合`Callable`接口执行任务并获取结果。
// 使用Callable接口创建线程CallablecallableTask = new Callable () { @Overridepublic Integer call() throws Exception {// 线程执行的逻辑,并返回结果return 42;}};FutureTaskfutureTask = new FutureTask<>(callableTask); Thread thread = new Thread(futureTask);thread.start();// 获取线程执行结果Integer result = futureTask.get();
选择哪种方式取决于具体的需求,例如是否需要线程间资源共享、是否需要返回执行结果等。每种方式都有其优缺点,但通常推荐使用实现`Runnable`接口的方式,因为它允许类继承其他类,提供了更好的扩展性

