引言
如果你正在学习Java编程,那么你可能已经知道Java是一种多线程编程语言。多线程编程可以帮助我们更高效地利用CPU,同时完成多项任务。但是,你可能还不知道如何在Java中创建和启动线程。在本节中,我们将深入探讨Java中的线程创建和启动。
一、创建线程
Java提供了3种方式来创建线程:

- 继承
Thread类 - 实现
Runnable接口 - 使用
Callable接口
1.1 继承Thread类
这是创建线程的最简单方式。你可以创建一个新的类,继承Thread类,然后重写run()方法。run()方法中包含了线程要执行的业务逻辑。以下是一个简单的例子:
class MyThread extends Thread {@Overridepublic void run() {System.out.println("MyThread is running");}
}
你可以通过创建MyThread的实例来启动线程:
MyThread thread = new MyThread();
thread.start();
1.2 实现Runnable接口
如果你不希望创建一个继承Thread类的子类,你可以创建一个实现Runnable接口的类。以下是一个例子:
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("MyRunnable is running");}
}
你可以通过创建Thread实例,然后将MyRunnable实例作为参数传递给Thread的构造函数来启动线程:
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
1.3 使用Callable接口
Callable接口与Runnable接口类似,但是它允许你返回一个值。以下是一个例子:
class MyCallable implements Callable<Integer> {@Overridepublic Integer call() {return 10;}
}
你可以通过创建FutureTask实例,然后将MyCallable实例作为参数传递给FutureTask的构造函数来启动线程。FutureTask可以让你获取Callable返回的值:
MyCallable callable = new MyCallable();
FutureTask<Integer> futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);
thread.start();
Integer result = futureTask.get();
1.4 创建线程的3种方式比较
| 特性 | 继承Thread类 | 实现Runnable接口 | 使用Callable接口 |
|---|---|---|---|
| 定义线程 | 通过扩展Thread类来定义线程的行为 | 通过实现Runnable接口来定义线程的行为 | 通过实现Callable接口来定义线程的行为 |
| 实现方式 | 通过继承Thread类,重写run()方法来定义线程的行为 | 通过实现Runnable接口,重写run()方法来定义线程的行为 | 通过实现Callable接口,重写call()方法来定义线程的行为 |
| 返回值 | 无返回值(如果线程执行的是具体任务,可以在run()方法中编写逻辑以输出结果) | 无返回值(如果线程执行的是具体任务,可以在run()方法中编写逻辑以输出结果) | 可返回计算结果(如果线程执行的是计算任务,可以在call()方法中编写逻辑以返回结果) |
| 异常处理 | run()方法中的异常会直接抛出,需要在主线程中处理 | run()方法中的异常会抛出到调用线程,可以捕获并处理异常 | call()方法中的异常会被包装为ExecutionException,可以在主线程中处理 |
| 线程状态 | 可以获取线程的状态(如新建、就绪、阻塞等) | 可以获取线程的状态(如新建、就绪、阻塞等) | 可以获取线程的状态(如新建、就绪、阻塞等) |
| 线程同步与共享资源 | 可以使用synchronized关键字来实现线程同步和共享资源 | 可以使用synchronized关键字来实现线程同步和共享资源 | 可以使用synchronized关键字来实现线程同步和共享资源 |
| 使用示例 | 示例1:通过继承Thread类创建线程(拓展子类并重写run()方法) | 示例2:通过实现Runnable接口创建线程(实现接口并重写run()方法) | 示例3:通过实现Callable接口创建线程(实现接口并重写call()方法) |
二、启动线程
启动线程非常简单。你只需要调用Thread的start()方法即可。start()方法会创建一个新的线程,并将你的Runnable或Callable对象传递给线程。
Thread thread = new Thread(runnable);
thread.start();
结语
在本节中,我们学习了如何在Java中创建和启动线程。希望这些信息对你有所帮助。如果你有任何问题,欢迎随时向我提问。

print("Hello, world.")
亲爱的读者,我是本篇文章的作者chwt9299。感谢您抽出宝贵的时间阅读我的作品。如果对我的作品产生了共鸣,或者觉得我的观点独到有趣,请用点赞、关注、评论、收藏来表达您的喜爱吧!n_n