在Java中,能够应用以下几种形式来创立线程:
1、继承Thread类:能够创立一个类,继承java.lang.Thread类,并重写run()办法来定义线程代码。而后,能够创立一个新的Thread对象,并调用start()办法来启动线程
class MyThread extends Thread { public void run() { // 线程代码 }}// 创立新线程并启动MyThread thread = new MyThread();thread.start();
2、实现Runnable接口:能够创立一个类,实现java.lang.Runnable接口,并实现run()办法来定义线程代码。而后,能够创立一个新的Thread对象,并将Runnable实例传递给Thread构造函数。
class MyRunnable implements Runnable { public void run() { // 线程代码 }}// 创立新线程并启动MyRunnable runnable = new MyRunnable();Thread thread = new Thread(runnable);thread.start();
3、实现Callable接口:能够创立一个类,实现java.util.concurrent.Callable接口,并实现call办法来定义线程代码。而后,能够创立一个新的Thread对象,并将Runnable实例传递给Thread构造函数。
import java.util.concurrent.*;class MyCallable implements Callable<Integer> { public Integer call() throws Exception { int sum = 0; for (int i = 1; i <= 10; i++) { sum += i; } return sum; }}public class Main { public static void main(String[] args) { // 创立线程池 ExecutorService executor = Executors.newSingleThreadExecutor(); // 提交可调用工作 Future<Integer> future = executor.submit(new MyCallable()); try { // 期待计算实现并获取后果 int result = future.get(); System.out.println("后果:" + result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // 敞开线程池 executor.shutdown(); }}
4、应用匿名外部类:能够应用匿名外部类来创立线程,防止创立多个类。能够在Thread构造函数中传递一个Runnable对象的匿名外部类来定义线程代码。
// 创立新线程并启动Thread thread = new Thread(new Runnable() { public void run() { // 线程代码 }});thread.start();
5、应用Lambda表达式:能够应用Lambda表达式来创立线程,防止创立多个类。能够在Thread构造函数中传递一个Runnable对象的Lambda表达式来定义线程代码。
// 创立新线程并启动Thread thread = new Thread(() -> { // 线程代码});thread.start();