当前位置:首页 > 行业动态 > 正文

Java 开启多线程常见的4种方法

Java 开启多线程常见的4种方法包括:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口通过 FutureTask包装器来创建 Thread 线程、使用 ExecutorService、Callable、Future 实现有返回结果的 多线程。

Java 开启多线程常见的4种方法

Java 开启多线程常见的4种方法  第1张

在 Java 编程中,多线程是一种非常实用的技术,它可以让程序在执行过程中同时处理多个任务,本文将介绍 Java 开启多线程的四种常见方法,包括继承 Thread 类、实现 Runnable 接口、使用 Callable 和 FutureTask 接口以及使用 ExecutorService。

继承 Thread 类

1、1 创建自定义线程类

要创建一个自定义线程类,需要继承 Thread 类,并重写其 run() 方法,run() 方法中的代码将在新线程中执行。

class MyThread extends Thread {
    @Override
    public void run() {
        // 在这里编写线程要执行的任务代码
    }
}

1、2 启动线程

创建好自定义线程类后,可以通过以下方式启动线程:

MyThread myThread = new MyThread();
myThread.start(); // 启动线程

实现 Runnable 接口

2、1 创建实现 Runnable 接口的类

要创建一个实现 Runnable 接口的类,需要实现 run() 方法,run() 方法中的代码将在新线程中执行。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 在这里编写线程要执行的任务代码
    }
}

2、2 将实现了 Runnable 接口的类作为参数传递给 Thread 类的构造函数,然后调用 start() 方法启动线程。

Thread thread = new Thread(new MyRunnable());
thread.start(); // 启动线程

使用 Callable 和 FutureTask 接口

3、1 实现 Callable 接口

要创建一个实现 Callable 接口的类,需要实现 call() 方法,call() 方法中的代码将在新线程中执行,并返回一个结果,可以通过 FutureTask 将 call() 方法的结果包装成一个可获取的结果对象。

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 在这里编写线程要执行的任务代码,并返回一个结果
        return result;
    }
}

3、2 将实现了 Callable<Integer> 接口的类作为参数传递给 FutureTask 的构造函数,然后调用 start() 方法启动线程,通过 get() 方法可以获取 call() 方法返回的结果。

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ExecutionException;
Callable<Integer> callable = new MyCallable();
FutureTask<Integer> futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);
thread.start(); // 启动线程,并在需要时获取结果:futureTask.get();

使用 ExecutorService(推荐)

4、1 实现 ScheduledExecutorService、ExecutorService、ThreadPoolExecutor、WorkStealingPool、ForkJoinPool、SynchronousQueueExecutor、SingleThreadExecutor、PriorityBlockingQueueExecutor、ScheduledThreadPoolExecutor、CachedThreadPoolExecutor、LinkedBlockingQueueExecutor、RejectedExecutionHandler等接口或类的类库提供了丰富的线程池管理功能,可以直接使用这些类库来创建和管理线程池,可以使用 ScheduledExecutorService 实现定时任务。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.concurrent.Future; // 可以用于提交任务并获取任务结果(推荐)
import java.util.concurrent.atomic.AtomicInteger; // 可以用于计数器等场景(推荐) (注:此为自 Java SE7u6以来引入的新特性)
// ... 其他推荐使用的类库接口或类 ... (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引入的新特性) (注:此为自 Java SE7u6以来引
0