Java并发执行举例
在Java中实现并发执行可以通过多种方式,最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例:
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. 使用Callable和Future
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并发编程方式,使用场景可以根据实际需求选择合适的实现方式。例如,对于简单的并发任务,Thread和Runnable就足够了;而对于复杂的任务,ExecutorService或ForkJoinPool可能会更高效。
相关文章:
Java并发执行举例
在Java中实现并发执行可以通过多种方式,最常见的方式包括使用线程、ExecutorService、ForkJoinPool等。以下是几种常用并发执行的示例: 1. 使用Thread类 这是Java中最基础的并发实现,通过创建一个继承自Thread的类或实现Runnable接口来定义…...
Java 基础知识九(网络编程)
UDP DatagramSocket:通讯的数据管道 -send 和receive方法 -(可选,多网卡)绑定一个IP和Port DatagramPacket -集装箱:封装数据 -地址标签:目的地IPPort package org.example.net;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n…...
深入解析Go语言的类型方法、接口与反射
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Go语言作为一门现代编程语言,以其简洁高效的特性受到广大开发者的喜爱。在本文中,我们将深入探讨Go语言中的类型方法、接口和反射机制。通过丰富的代码示例和详尽的解释,帮助您全面理解这些关键概念,并在实际…...
C#中线程池【异步】
在 WinForm 项目中,线程池中的线程主要用于执行异步和并发任务。当你调用某些异步方法或使用并行编程时,线程池中的线程就会被使用。 在以下场景中,线程池的线程会被使用: 使用场景 异步任务执行 当你使用 Task.Run() 或 TaskF…...
OpenAI 刚刚推出 o1 大模型!!突破LLM极限
北京时间 9 月 13 日午夜,OpenAI 正式发布了一系列全新的 AI 大模型,专门用于应对复杂问题。 这一新模型的出现代表了一个重要突破,其具备的复杂推理能力远远超过了以往用于科学、代码和数学等领域的通用模型,能够解决比之前更难的…...
【Vmware16安装教程】
📖Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址:https://www.vmware.com/ 百度云盘:Vmware16下载 123云盘:Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe,点击…...
Delphi5利用DLL实现窗体的重用
文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…...
使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
在开发 Web 应用程序时,用户注册是一个常见的功能。为了确保每个用户都有一个唯一的用户名,我们需要在用户注册时检查数据库中是否已经存在该用户名。本文将详细介绍如何在 Servlet 中使用 JDBC 技术来检查用户名是否存在。 1. JDBC 简介 Java Databas…...
前端常见面试-首页性能提升、项目优化
首页性能提升 Vue 首页性能提升是Vue应用开发中非常重要的一环,它直接影响用户体验和应用的加载速度。以下是一些关键的Vue首页性能提升策略: 1. 代码分割与懒加载 路由懒加载:利用Webpack的动态导入(import())特性…...
卷王阿里又开启价格战,大模型价格降价85%!
我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 9月19日,就是昨天,一年一度的云计算盛…...
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战
Java中的异步编程模式:CompletableFuture与Reactive Programming的实战 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Java开发中,异步编程已经成为提高应用性能和…...
7iDU AMP田岛绣花机驱动器维修0J2100400022
7iDU AMP神州田岛绣花机驱动器维修0J2101300000绣花机控制器等全系列型号均可处理。 田岛7iDU AMP是田岛绣花机中使用很广的一种5相驱动器,在田岛平绣车TMEF-H,TMFD中应用,在链条车TMCE112S,和盘带车TMLG中大量使用。其采用的东芝…...
部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现
部署资源 AUTODL 使用最小3080Ti 资源,cuda > 12.0使用云服务器,部署fastGPT oneAPI,M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…...
vue websocket 使用
基于webSocket通信的库主要有 socket.io,SockJS 关于SockJS的使用 先安装 sockjs-client 和 stompjs npm install sockjs-client npm install stompjs import SockJS from sockjs-client; import Stomp from stompjs; export default { data () { …...
Spring Boot 入门面试五道题
在准备Spring Boot面试时,从简单到困难设计面试题可以帮助你系统地复习和评估自己的掌握程度。以下是五个不同难度的Spring Boot面试题: 1. 简单题:什么是Spring Boot?它主要解决了什么问题? 答案: Sprin…...
【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)
文章目录 前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区分参数和属性的含义2.2、父子组件嵌套 二、装饰器语法1.State2.Prop3.Link4.Watch5.Provide和Consume6.Observed和ObjectLink代码示例:示例1:(不使用Observed和ObjectLi…...
国产品牌 KTH1701系列 高性能、低功耗、全极磁场检测霍尔开关传感器
国产品牌 KTH1701系列 高性能、低功耗、全极磁场检测霍尔开关传感器 概述: KTH1701 是一款低功耗霍尔开关传感器,专为空间紧凑系统和电池电量敏感系统而设计。该芯片可以提供多种磁场阈值、开关工作频率和封装形式以适配各种应用。 当施加的S 极或 N 极…...
如何不终止容器退出Docker Bash会话
如何不终止容器退出Docker Bash会话 💖The Begin💖点点关注,收藏不迷路💖 当通过docker exec进入Docker容器的bash会话后,如果想退出但不停止容器,可以使用快捷键组合: 按下Ctrl+P然后紧接着按下Ctrl+Q。 这个操作会让你从bash会话中“分离”出来,但容器会继续运行…...
杰理芯片各型号大全,方案芯片推荐—云信通讯
29₤vFG537sTUWr《 https://s.tb.cn/h.gJ4LjAH CZ0016 杰理芯片 杰理芯片各型号大全,方案芯片推荐 https://shop.m.taobao.com/shop/shopIndex.htm?shop_id498574364&bc_fl_srctbsms_crm_3928605685_deliver$2553947245685_10973444242...
解决服务器首次请求异常耗时问题
1. 问题描述 在我们的图像识别API服务中,我们遇到了一个棘手的问题:服务器在首次接收请求时,响应时间异常地长,经常导致超时错误。这不仅影响了用户体验,还可能导致系统不稳定。 现象: 测试接口在首次调用时出现超时后续请求则能正常响应复现方法: 只需在服务重启后或长时间…...
领域驱动设计实战:解密DDDSample中Cargo聚合根的黄金法则
领域驱动设计实战:解密DDDSample中Cargo聚合根的黄金法则 【免费下载链接】dddsample-core This is the new home of the original DDD Sample app (previously hosted at sf.net).. 项目地址: https://gitcode.com/gh_mirrors/dd/dddsample-core DDDSample…...
YOLO12参数优化:针对不同场景(如密集小目标)调整模型,提升检测效果
YOLO12参数优化:针对不同场景(如密集小目标)调整模型,提升检测效果 1. YOLO12模型核心特性回顾 YOLO12作为最新一代目标检测模型,其革命性的注意力为中心架构为各类检测任务提供了强大基础。在深入参数优化前&#x…...
Highlight.js在Vue3中的性能优化指南:按需加载 vs 全量引入
Highlight.js在Vue3中的性能优化实战:从全量引入到精准加载 当你的Vue3项目需要展示代码片段时,Highlight.js无疑是语法高亮的首选方案。但在大型应用中,直接全量引入这个强大的工具可能会让你的打包体积意外膨胀——完整的Highlight.js包含超…...
SEO_2024年最新SEO趋势与实战操作指南(313 )
2024年最新SEO趋势分析:揭秘百度收录的核心要点 在数字营销的快速发展中,SEO(搜索引擎优化)始终是网站运营者和内容创作者关注的重点。尤其是在中国市场,百度作为主流搜索引擎,其优化策略和趋势更是需要深…...
Jasny Bootstrap按钮标签组件详解:如何优雅地添加图标标签
Jasny Bootstrap按钮标签组件详解:如何优雅地添加图标标签 【免费下载链接】bootstrap The missing components for your favorite front-end framework. 项目地址: https://gitcode.com/gh_mirrors/boots/bootstrap Jasny Bootstrap作为Bootstrap的扩展组件…...
咨询进阶——详解《商业模式思维的30个技巧》
《商业模式思维的30个技巧》读书笔记可提炼关键技巧:如用价值链连接客户价值、深入理解客户细分与价值定位、灵活调整商业模式、制定差异化定价策略、履行社会责任、持续创新及重视人才管理等[3][18]。 详答 一、核心技巧提炼 客户价值与价值链连接 构建价值传递机制:通过价…...
你的RAG应用安全吗?藏在向量数据库里的‘特洛伊木马’——外部数据注入风险详解
RAG应用安全深度剖析:如何抵御外部数据源中的"特洛伊木马" 当你在咖啡馆用手机查看银行账户时,是否想过那个看似无害的二维码可能藏着窃取密码的指令?类似的威胁正在AI领域上演——攻击者通过污染RAG(检索增强生成&…...
SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue实现方案
SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue一、项目背景与目标SpringBoot源码企业公司ERP进销存管理系统JavaWeb项目前后端分离Vue随着企业信息化管理的需求日益增长,ERP(企业资源计划)系统成为企业提升管理效率、优化…...
告别Keil C51安装烦恼:STC8单片机开发环境保姆级配置指南(含芯片包添加)
从零搭建STC8开发环境:Keil C51避坑指南与实战技巧 第一次接触STC8单片机时,最让人头疼的莫过于开发环境的搭建。网上教程要么过于简略,要么步骤不全,总会在某个环节卡住——可能是Keil安装报错,可能是芯片包添加失败&…...
千问3.5-9B参数调优:降低OpenClaw复杂任务token消耗
千问3.5-9B参数调优:降低OpenClaw复杂任务token消耗 1. 为什么需要关注token消耗? 去年冬天第一次用OpenClaw自动整理季度报告时,我被账单吓了一跳——连续运行3天的复杂任务消耗了价值200多美元的token。这让我意识到,在享受自…...
