Appearance
在 Java 中,可以通过以下四种方式创建和启动线程:
- 继承 Thread 类
- 实现 Runnable 接口
- 实现 Callable 接口
- 使用匿名内部类
下面是每种方法的详细说明和示例代码。
继承 Thread 类 通过继承
Thread类并重写其run()方法来创建线程。这种方法简单直接,但不适用于需要继承其他类的情况,因为 Java 不支持多重继承。 public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法正在执行..."); } public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } }实现 Runnable 接口 通过实现
Runnable接口并重写其run()方法来创建线程。这种方法更加灵活,因为可以实现其他接口和继承其他类。 public class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法执行中..."); } public static void main(String[] args) { Thread thread = new Thread(new MyRunnable()); thread.start(); } }实现 Callable 接口 通过实现
Callable接口并重写其call()方法来创建线程。Callable接口类似于Runnable,但可以返回结果并抛出异常。需要配合FutureTask类使用。 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MyCallable implements Callable<Integer> { @Override public Integer call() { System.out.println(Thread.currentThread().getName() + " call()方法执行中..."); return 1; } public static void main(String[] args) { MyCallable callable = new MyCallable(); FutureTask<Integer> futureTask = new FutureTask<>(callable); Thread thread = new Thread(futureTask); thread.start(); try { System.out.println("返回值: " + futureTask.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } }使用匿名内部类 通过使用匿名内部类的方式创建线程,这种方式非常简洁,不需要单独定义类。 public class CreateRunnable { public static void main(String[] args) { // 创建并启动线程 Thread thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("i: " + i); } } }); thread.start(); } }
其他创建线程的方式 除了上述四种常见的方法外,还可以使用 Java 提供的并发工具,如 ExecutorService 来管理和创建线程池,从而实现更复杂的线程管理。 使用 ExecutorService 通过 ExecutorService 可以方便地管理线程池,执行多任务,避免手动创建和管理线程。 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorServiceExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " 任务1执行中..."); } }); executorService.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " 任务2执行中..."); } }); executorService.shutdown(); } }
总结 在 Java 中,创建线程的主要方法有继承 Thread 类、实现 Runnable 接口、实现 Callable 接口以及使用匿名内部类。此外,使用 ExecutorService 可以更加灵活和高效地管理线程池。根据不同的需求和场景选择合适的线程创建方式,可以提升程序的并发性能和可维护性。
