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