1. 继承Thread类,重写run方法:
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
// 创建线程并启动
MyThread myThread = new MyThread();
myThread.start();
2. 实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target:
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
// 创建线程并启动
Thread myThread = new Thread(new MyRunnable());
myThread.start();
3. 通过Callable和FutureTask创建线程:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyCallable implements Callable<String> {
public String call() throws Exception {
// 线程执行的代码
return "Callable result";
}
}
// 创建FutureTask并传入Callable实例
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
// 创建线程并启动
Thread myThread = new Thread(futureTask);
myThread.start();
// 获取线程执行结果
String result = futureTask.get();
4. 通过线程池创建线程:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
// 创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务给线程池执行
executorService.submit(new MyRunnable());
// 关闭线程池
executorService.shutdown();
这些是Java中常见的多线程实现方式,选择合适的方式取决于具体的需求和场景。通常来说,实现Runnable接口更灵活,因为一个类可以同时实现多个接口,而继承Thread类则不具备这种灵活性。使用线程池可以更好地管理和控制线程,避免频繁创建和销毁线程所带来的性能开销。Callable和FutureTask的组合可以获取线程执行的结果。