publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("Thread by extending Thread class");}publicstaticvoidmain(String[] args){MyThread thread =newMyThread();thread.start();// 启动线程}}
2.2 特点
简单直观,适合快速实验。
不能再继承其他类(因为 Java 单继承)。
三、方式二:实现 Runnable 接口
3.1 示例代码
publicclassMyRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println("Thread by implementing Runnable");}publicstaticvoidmain(String[] args){Thread thread =newThread(newMyRunnable());thread.start();}}
3.2 Lambda 简写(Java 8+)
Thread thread =newThread(()->System.out.println("Runnable with Lambda"));
thread.start();
3.3 特点
更推荐的方式:任务与线程解耦,利于代码复用。
可避免继承限制(类可同时实现多个接口)。
四、方式三:实现 Callable 接口 + FutureTask
4.1 示例代码
importjava.util.concurrent.*;publicclassMyCallableimplementsCallable<String>{@OverridepublicStringcall(){return"Result from Callable";}publicstaticvoidmain(String[] args)throwsException{Callable<String> callable =newMyCallable();FutureTask<String> futureTask =newFutureTask<>(callable);Thread thread =newThread(futureTask);thread.start();String result = futureTask.get();// 阻塞直到任务完成System.out.println(result);}}
4.2 特点
支持返回值(Future.get() 获取结果)。
支持异常抛出。
常用于需要任务结果的异步处理。
五、方式四:使用线程池(推荐)
5.1 创建线程池的方式
ExecutorService executor =Executors.newFixedThreadPool(5);executor.submit(()->{System.out.println("Task in thread pool");});
executor.shutdown();
5.2 使用 Callable + Future 获取结果
Callable<String> task =()->"Hello from Callable";Future<String> future = executor.submit(task);System.out.println(future.get());
5.3 推荐使用 ThreadPoolExecutor 构造方法
ExecutorService pool =newThreadPoolExecutor(2,4,60,TimeUnit.SECONDS,newLinkedBlockingQueue<>(100),Executors.defaultThreadFactory(),newThreadPoolExecutor.AbortPolicy());