Java 开启多线程常见的4种方法
- 行业动态
- 2024-01-01
- 3065
Java 开启多线程常见的4种方法包括:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口通过 FutureTask包装器来创建 Thread 线程、使用 ExecutorService、Callable、Future 实现有返回结果的 多线程。
Java 开启多线程常见的4种方法
在 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以来引
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/276495.html