如何创建java线程
创建Java线程的方法
在Java中,创建线程主要有两种方法:继承Thread类和实现Runnable接口。每种方法都有其适用场景和优缺点。
继承Thread类
通过继承Thread类并重写run()方法,可以创建一个线程。这种方法简单直接,适合简单的线程任务。
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread is running");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
继承Thread类的缺点是Java不支持多重继承,因此如果类已经继承了其他类,就无法再继承Thread类。
实现Runnable接口
通过实现Runnable接口并重写run()方法,可以更灵活地创建线程。这种方法适用于需要继承其他类的场景。
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread is running");
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
实现Runnable接口的优势是避免了单继承的限制,并且更符合面向对象的设计原则。

使用Lambda表达式
从Java 8开始,可以使用Lambda表达式简化Runnable接口的实现,使代码更加简洁。
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("Thread is running");
});
thread.start();
}
}
Lambda表达式适用于简单的线程任务,减少了样板代码的编写。
使用Callable和Future
如果需要线程返回结果或抛出异常,可以使用Callable接口和Future类。Callable类似于Runnable,但可以返回结果。

import java.util.concurrent.*;
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Thread result";
}
}
public class Main {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new MyCallable());
System.out.println(future.get());
executor.shutdown();
}
}
Callable和Future适用于需要获取线程执行结果的场景,提供了更强大的线程控制能力。
使用线程池
为了提高线程管理的效率,可以使用线程池来管理线程的生命周期。Java提供了ExecutorService接口及其实现类来创建线程池。
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
executor.execute(() -> {
System.out.println("Thread is running");
});
}
executor.shutdown();
}
}
线程池适用于需要频繁创建和销毁线程的场景,可以显著提高性能并减少资源消耗。
注意事项
- 线程启动必须调用
start()方法,而不是直接调用run()方法。start()方法会创建新的线程并执行run()方法,而直接调用run()方法会在当前线程中执行。 - 避免使用
stop()方法终止线程,这种方法不安全。推荐使用标志位或interrupt()方法来安全终止线程。 - 在多线程环境下,注意线程安全问题,使用同步机制(如
synchronized或Lock)保护共享资源。






