Java创建线程的四种方式包括:
- 继承Thread类并重写run()方法
- 实现Runnable接口并重写run()方法
- 实现Callable接口并重写call()方法
- 使用线程池创建线程
1.继承Thread类
使用 Thread 类创建线程是最常用的方式,具体示例代码如下:
public class ThreadDemo extends Thread {
@Override
public void run() {
System.out.println("Thread is running.");
}
}
// 在主线程中启动另一个线程
public class Main {
public static void main(String[] args) {
ThreadDemo thread = new ThreadDemo();
thread.start();
}
}
2.实现 Runnable 接口
实现 Runnable 接口创建线程使用 Runnable 接口创建线程是更加灵活的方式,因为可实现多个线程共享同一个 runnable 对象,具体示例代码如下:
public class RunnableDemo implements Runnable {
@Override
public void run() {
System.out.println("Thread is running.");
}
}
// 在主线程中启动另一个线程
public class Main {
public static void main(String[] args) {
RunnableDemo runnable = new RunnableDemo();
Thread thread = new Thread(runnable);
thread.start();
}
}
3.实现 Callable 接口
与 Runnable 接口不同的是,Callable 接口的 call() 方法可以返回一个结果,并且可以抛出异常。具体代码实现如下:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableThreadDemo implements Callable<String> {
@Override
public String call() throws Exception {
return "This is a Callable thread.";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableThreadDemo c = new CallableThreadDemo ();
FutureTask<String> ft = new FutureTask<>(c);
Thread t = new Thread(ft);
t.start();
// 获取线程返回值
String result = ft.get();
System.out.println(result);
}
}
4.使用 Executor 框架创建线程池(推荐)
线程池创建线程可以减少线程频繁创建和销毁的开销,具体代码实现如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo implements Runnable {
@Override
public void run() {
System.out.println("Thread is running.");
}
public static void main(String[] args) {
//使用Executors线程工厂类创建固定大小的线程池,线程数为3
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 0; i < 5; i++) {
executor.execute(new ThreadPoolDemo());
}
executor.shutdown();
}
}