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

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

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

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

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

继承 Thread 类

1、1 创建自定义线程类

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

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

1、2 启动线程

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

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

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 接口

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

要创建一个实现 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以来引

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/130449.html

(0)
酷盾叔的头像酷盾叔订阅
上一篇 2024-01-01 15:28
下一篇 2024-01-01 15:39

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入