当前位置: 首页 > news >正文

Java并发执行举例

在Java中实现并发执行可以通过多种方式,最常见的方式包括使用线程、ExecutorServiceForkJoinPool等。以下是几种常用并发执行的示例:

1. 使用Thread

这是Java中最基础的并发实现,通过创建一个继承自Thread的类或实现Runnable接口来定义任务,并启动线程。

class MyTask extends Thread {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " is executing task.");}
}public class Main {public static void main(String[] args) {MyTask task1 = new MyTask();MyTask task2 = new MyTask();task1.start();task2.start();}
}

2. 使用Runnable接口

Runnable接口更灵活,因为可以让任务类继承其他类,同时实现并发任务。

class MyRunnableTask implements Runnable {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " is executing task.");}
}public class Main {public static void main(String[] args) {Thread thread1 = new Thread(new MyRunnableTask());Thread thread2 = new Thread(new MyRunnableTask());thread1.start();thread2.start();}
}

3. 使用ExecutorService

ExecutorService是Java中用于管理线程池的接口,能够更高效地执行并发任务,适合管理大量并发任务。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Main {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(2);Runnable task1 = () -> {System.out.println(Thread.currentThread().getName() + " is executing task 1.");};Runnable task2 = () -> {System.out.println(Thread.currentThread().getName() + " is executing task 2.");};executor.submit(task1);executor.submit(task2);executor.shutdown(); // 关闭线程池}
}

4. 使用CallableFuture

Callable接口允许任务返回结果,而Future可以用于获取结果或控制任务的执行状态。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class Main {public static void main(String[] args) throws Exception {ExecutorService executor = Executors.newSingleThreadExecutor();Callable<Integer> task = () -> {System.out.println(Thread.currentThread().getName() + " is executing task.");return 123;};Future<Integer> future = executor.submit(task);// 阻塞等待结果Integer result = future.get();System.out.println("Task result: " + result);executor.shutdown();}
}

5. 使用ForkJoinPool

ForkJoinPool是专门用于并行处理任务的线程池,特别适合用于递归任务。

import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;class FibonacciTask extends RecursiveTask<Integer> {private final int n;public FibonacciTask(int n) {this.n = n;}@Overrideprotected Integer compute() {if (n <= 1) {return n;}FibonacciTask f1 = new FibonacciTask(n - 1);FibonacciTask f2 = new FibonacciTask(n - 2);f1.fork();return f2.compute() + f1.join();}
}public class Main {public static void main(String[] args) {ForkJoinPool pool = new ForkJoinPool();FibonacciTask task = new FibonacciTask(10);Integer result = pool.invoke(task);System.out.println("Fibonacci result: " + result);}
}

这些例子展示了不同的Java并发编程方式,使用场景可以根据实际需求选择合适的实现方式。例如,对于简单的并发任务,ThreadRunnable就足够了;而对于复杂的任务,ExecutorServiceForkJoinPool可能会更高效。

http://www.lryc.cn/news/441724.html

相关文章:

  • Java 基础知识九(网络编程)
  • 深入解析Go语言的类型方法、接口与反射
  • C#中线程池【异步】
  • OpenAI 刚刚推出 o1 大模型!!突破LLM极限
  • 【Vmware16安装教程】
  • Delphi5利用DLL实现窗体的重用
  • 使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
  • 前端常见面试-首页性能提升、项目优化
  • 卷王阿里又开启价格战,大模型价格降价85%!
  • Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
  • 7iDU AMP田岛绣花机驱动器维修0J2100400022
  • 部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现
  • vue websocket 使用
  • Spring Boot 入门面试五道题
  • 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)
  • 国产品牌 KTH1701系列 高性能、低功耗、全极磁场检测霍尔开关传感器
  • 如何不终止容器退出Docker Bash会话
  • 杰理芯片各型号大全,方案芯片推荐—云信通讯
  • 解决服务器首次请求异常耗时问题
  • VS code 创建与运行 task.json 文件
  • 【电商API接口定价】618品牌定价参考(电商API接口数据采集)
  • PyRFC 适用于 Python 的异步、非阻塞 SAP NetWeaver RFC SDK 绑定
  • 解决matplotlib画中文时缺乏中文字体问题。
  • 小琳AI课堂 掌握强化学习:探索OpenAI Gym的魅力与Python实战
  • 1.3 等价类划分法
  • 概率论原理精解【15】
  • 【新手上路】衡石分析平台系统管理手册-安全管理
  • 【Matlab】matlab 结构体使用方法
  • Mamba YOLO World
  • JVM 内存模型:堆、栈、方法区讲解