在Java语言中,创建线程主要有四种不同的方式:
1.继承Thread类:Java中的Thread类是实现线程的最基本方法。你可以通过继承Thread类并重写其run()方法来创建新线程。然后你可以创建Thread的实例,并调用start()方法启动新线程。
- javapublic class MyThread extends Thread {
- @Override
- public void run() {
- System.out.println("This is a thread created by extending Thread class");
- }
- }
-
- public class Main {
- public static void main(String[] args) {
- MyThread myThread = new MyThread();
- myThread.start();
- }
- }
2.实现Runnable接口:如果你有一个已经存在的类,而你不想让它继承Thread类,你可以让这个类实现Runnable接口。然后你可以创建一个Thread对象,把你的Runnable对象作为参数传递给Thread的构造函数,然后调用start()方法启动新线程。
- javapublic class MyRunnable implements Runnable {
- @Override
- public void run() {
- System.out.println("This is a thread created by implementing Runnable interface");
- }
- }
-
- public class Main {
- public static void main(String[] args) {
- Thread thread = new Thread(new MyRunnable());
- thread.start();
- }
- }
3.使用Executor框架:Java的Executor框架提供了一种更为高级的方式来创建和管理线程。你可以创建一个ExecutorService,然后使用它的submit()方法提交一个Callable对象,这会返回一个Future对象。你也可以使用ExecutorService的execute()方法来执行一个Runnable对象。这两种方法都会在新线程中运行你的任务。
- javapublic class MyCallable implements Callable<String> {
- @Override
- public String call() throws Exception {
- return "Hello, World!";
- }
- }
-
- public class Main {
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- ExecutorService executorService = Executors.newSingleThreadExecutor();
- Future<String> future = executorService.submit(new MyCallable());
- System.out.println(future.get());
- executorService.shutdown(); // 关闭线程池,不关闭的话,程序可能无法正常退出
- }
- }
4.使用线程池(ThreadPoolExecutor):用 ExecutorService 创建线程
注意:不建议用 Executors 创建线程池,建议用 ThreadPoolExecutor 定义线程池。
用的无界队列,可能造成 OOM ;不能自定义线程名字,不利于排查问题。
以上四种方式底层都是基于 Runnable