WEB框架中异步实现方案

异步解决方案中除了JMS,AJAX,DWR等外的简单选择,就是多线程(具体的就是这个包:java.util.concurrent)
为实现在WEB中需要执行一些耗时的操作,例如发发邮件之类,但是又不能影响前台页面的响应这种需求,多线程中列举2个程序来解决。分别是立即执行和计划任务式的执行,2种执行都是在主线程外另外建个线程,故不影响主线程。
package Executor;

import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* MVC中的异步执行解决方案
* @Author 三上
*/
public class SingleThreadExecutor {
public static void main(String[] args) {
try {
// 创建一个单线程执行程序
ExecutorService executorService = Executors
.newSingleThreadExecutor();
final Runnable beeper = new Runnable() {
int count = 0;

public void run() {
System.out.println(new Date() + " beep " + (++count));
}
};
for (int i = 0; i < 100; i++) {
executorService.execute(beeper);
}
executorService.shutdown();
System.out.println("我是主线程,先执行我");
} catch (Exception e) {
}
}
}

package concurrent;

import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
/*
* ScheduledExecutorService 一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
* 要安排在某个以后的 Date 运行,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。
* 参考网址:http://www.kuqin.com/J2SE6-API/java/util/concurrent/ScheduledExecutorService.html
*/
public class TestScheduledThread {
public static void job() {
final ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(2);
final Runnable beeper = new Runnable() {
int count = 0;
public void run() {
System.out.println(new Date() + " beep " + (++count));
}
};
//Callable与Runnable得区别是,它有返回值
Callable callable=new Callable(){
int count = 0;
public Object call() {
System.out.println(new Date() + " callbeep " + (++count));
return count;
}
};
//1秒钟后运行,只执行1次
final ScheduledFuture beeperHandle3 = scheduler.schedule(callable, 1, SECONDS);
final ScheduledFuture beeperHandle4 = scheduler.schedule(beeper, 1, SECONDS);
// 1秒钟后运行,并每隔2秒运行一次
final ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate(
beeper, 1, 2, SECONDS);
// 2秒钟后运行,并每次在上次任务运行完后等待5秒后重新运行
final ScheduledFuture beeperHandle2 = scheduler.scheduleWithFixedDelay(
beeper, 2, 5, SECONDS);
// 30秒后结束关闭任务,并且关闭Scheduler
scheduler.schedule(new Runnable() {
public void run() {
beeperHandle.cancel(true);
beeperHandle2.cancel(true);
beeperHandle3.cancel(true);
beeperHandle4.cancel(true);
scheduler.shutdown();
}
}, 30, SECONDS);
}

public static void main(String[] args) {
job();
System.out.println("我这个执行完了,但是后面还有");
}
}

如果要求发完邮件后,能在前台显示“已发送完成”,那么就用下面这个:
package concurrent;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TestFutureTask {
public static void main(String[] args) throws InterruptedException,
ExecutionException, TimeoutException {
final ExecutorService exec = Executors.newFixedThreadPool(5);
Callable call = new Callable() {
public String call() throws Exception {
Thread.sleep(1000 * 5);
return "Other less important but longtime things.";
}
};
Future task = exec.submit(call);
// 重要的事情
Thread.sleep(1000 * 3);
System.out.println("Let’s do important things.");
// 其他不重要的事情(比如发邮件等),30秒内如果不执行完,就返回null
Object obj = task.get(30,TimeUnit.SECONDS);
System.out.println(obj);
// 关闭线程池
exec.shutdown();
}
}
javaweb异步处理程序 NULL 博文链接:https://jic.iteye.com/blog/1985523 立即下载

相关推荐

Java异步编程框架之Promise介绍

Java异步编程框架Promise的介绍,对于理解java异步编程有哦帮助。

如何实现web请求的异步处理

如何实现web请求的异步处理 目前,我们编写的代码基本上都是同步请求的,我们每次请求,都会站哟过客户端的一个资源,一个链接,导致连接数减少。如何进行异步处理,那么我们处理的速度会大大的增加。 方法一:servlet3.0后,我们的servlet支持了异步请求的方式来执行我们的业务逻辑。 通过request.startAsync(request, response)来将同步请求转为异步,该方法返回一个AsyncContext 对象,在A中将该对象保存起来,等B的响应到来的时候,就可以利用该对象来拿到re

《两个菜鸟程序员》 1106

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1166

web应用中实现异步任务队列

开发中遇到这样一个需求。导出excel可能会超时。所以需要做成异步下载。因为下载线程会比较占用cpu资源,可能会有一些慢sql,所以需要控制并发数。 1.建立一个堵塞链表队列,用来存在任务; 2.收到用户请求创建一个下载任务,放在任务队列中。 3.在web.xml中设置一个监听类,启动一个线程定时扫描任务队列,当有任务时执行任务。 4.在执行任务时设置FutureTask超时时间...

weixin_30781107的博客 382

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

Python自动化测试报告:飞书群机器人消息卡片实战

本文详细介绍了如何利用Python和飞书群机器人实现自动化测试报告的智能通知。通过构建可定制的消息卡片,将测试结果(如通过数、失败数)以清晰、美观的格式自动推送至团队群聊,并支持一键跳转查看详细报告,从而显著提升团队协作与问题响应效率。

k6l7m8n9的博客 811

[Javaweb]Axios异步框架

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 特性:这一篇文章我们主要使用Axios对原生Ajax的封装特性Axios的使用也很简单: 第一步:我们先把Axios下载下来 当然我们不能直接在web项目中引入一个本地资源,我们可以把里面的核心文件拖入到项目中第二步:使用axios 发送请求,并获取响应结果发送 get 请求 发送 post 请求 是用来发送异步请求的,小括号中使用 js 对象传递请求相关的参数: 需要传递一个匿名函数。我们将 中

十八岁讨厌编程的博客 984

YOLOv8 改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南。

weixin_39818775的博客 1073

【Java教程】Day22-28 Spring框架:开发Web应用——异步处理

在Servlet模型中,每个请求都是由某个线程处理的,并且响应会在相同线程中写入IO流并发送给客户端。为了处理大量并发请求,Servlet容器会通过线程池来处理请求,确保每个请求都由独立线程完成。然而,如果某个请求的处理时间较长,线程池可能会迅速耗尽,导致服务器无法处理新的请求。为了解决这一问题,Servlet 3.0引入了异步处理,让请求的处理可以在不同线程间切换,从而避免阻塞当前线程。 在本文中,我们将深入探讨如何在Spring MVC中使用异步处理请求的技术,并通过实例代码演示其应用。

max202011161630的博客 1043

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

Robot_PLC_HMI_Automation 6725

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9267

java 高并发web架构_java的轻量级高并发web框架vert.x介绍

小沃的开发很少使用java因为我一直觉得java的spring框架太重了,以前使用php或是使用nodejs做开发时,也是很少使用第三方框架。之前有用过go语言开发中间件,当时也是保持同样的态度,只使用原生框架。但是,在小沃的客户中,依旧有很多希望使用java开发,原因就在于java的历史性很强,语言本身的bug少,会这门语言的人也多。因此小沃也一直在寻找一个轻量级高并发的java web框架。最...

weixin_33459498的博客 954

9.6华为OD机试真题 新系统【仓储货物有序出库】

华为OD机试真题 新系统【仓储货物有序出库】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【仓储货物有序出库】多语言题解。

qq_45776114的博客 885

Uvicorn:Python 异步 Web 服务器的首选

Uvicorn是Python生态中最流行的ASGI服务器之一,特别适合异步Web开发。它解决了传统WSGI服务器在WebSocket和长连接场景下的局限性,原生支持现代Web应用的实时通信需求。安装简便,性能优异(标准版使用C语言优化),与FastAPI、Starlette等主流框架深度整合。通过将服务器与框架解耦,Uvicorn在ASGI生态中占据核心位置,是Python异步Web开发的首选方案,从安装到运行仅需几分钟即可快速上手。

fenfoudiao774的博客 319

PHP实现获取本机ip及mac地址​(附完整源码)

PHP实现获取本机ip及mac地址​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 354

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python sanic_python异步Web框架sanic的实现

我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似Flask语法的异步框架。不过sanic对环境有要求:macOS/linuxpython 3.6+不过,我在macOS上安装 sanic 还是踩了坑。依赖库ujson一直安装失败。最后不得不卸载官方p...

weixin_39582480的博客 148

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

真正的 Tornado 异步非阻塞

其中 Tornado 的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,在需要并发能力时候就应该使用 Tornado。但是在实际使用过程中很容易把 Tornado 使用成异步阻塞框架,这样对比其他两大框架没有任何优势而言,本文就如何实现真正的异步非阻塞记录。 以下使用的 Python

矢的飞跃的专栏 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java高并发系统方案解决之一 ,异步请求的重要性

在做电商系统时,流量入口如首页、活动页、商品详情页等系统承载了网站的大部分流量,而这些系统的主要职责包括聚合数据拼装模板、热点统计、缓存、下游功能降级开关、托底数据等等。其中聚合数据需要调用其它多个系统服务获取数据、拼装数据/模板然后返回给前端,聚合数据来源主要有依赖系统/服务、缓存、数据库等;而系统之间的调用可以通过如http接口调用(如HttpClient)、SOA服务调用(如dubbo、th...

飞奔的小强 6212

Hypha框架深度解析:现代Python异步Web开发与API构建实践

在现代Web开发中,异步编程和API构建是提升应用性能与开发效率的核心技术。异步编程通过非阻塞I/O操作,允许服务器同时处理大量并发连接,特别适合I/O密集型场景如数据库查询和外部API调用。其技术价值在于显著提高资源利用率和系统吞吐量,降低响应延迟。这一原理在微服务架构和实时应用中尤为重要,能够支撑高并发用户请求。应用场景广泛覆盖从快速原型开发到生产级微服务部署。本文聚焦于Hypha这一轻量级Python Web框架,它基于ASGI协议原生支持异步,并内置依赖注入系统,为开发者提供了高效、清晰的API开发

weixin_30460489的博客 313

黑苹果 EFI 一键生成指南:10 分钟拿到成品

刚接触黑苹果的朋友,多半卡在"配引导"这一步。OpCore-Simplify 把黑苹果 EFI 一键生成压到了 10 分钟量级:导入一份硬件报告、确认 macOS 版本,Results/ 里就会躺着一套能直接写进 U 盘的 OpenCore 引导器,不用再翻论坛对设备 ID。 ## 最短路径跑通:4 步从 clone 到 Results 成品 先上最短路径,读完这一段就能跑起来。 1. 把源

gitblog_01146的博客 767

学习tornado -- 异步

why asynchronous tornado是一个异步web framework,说是异步,是因为tornado server与client的网络交互是异步的,底层基于io event loop。但是如果client请求server处理的handler里面有一个阻塞的耗时操作,那么整体的server性能就会下降。 def MainHandler(tornado.web.Re

2035

把现实城市搬进Minecraft,只差一个框

想在游戏里沿着自己家楼下那条街走一圈吗?不用想象:Arnis 能把现实城市按真实坐标搬进 Minecraft 存档。它读取 OpenStreetMap(全球众包地图数据库)和真实高程数据,把道路、河流、建筑按原位置铺出来,Java 版(1.17+)和 Bedrock 版都支持。 ## 它是什么:用真实数据铺一座城 [![Arnis 生成的 Minecraft 现实城市景观](https://r

gitblog_01195的博客 666

eclipse Filter web.xml 问题解决 异步请求@WebServlet

<filter> <filter-name>AsynServlete</filter-name> <filter-class>com.kad.app.action.AsynServletT</filter-class> <async-supported>true</as...

weixin_34381687的博客 219

Poseidon服务器框架:高效异步网络编程的利器

Poseidon服务器框架:高效异步网络编程的利器 项目介绍 Poseidon服务器框架是一款专为高性能网络应用设计的服务器框架,旨在简化异步网络编程的复杂性。它基于C++14开发,充分利用了Linux平台的特性,提供了强大的功能和灵活的配置选项。Poseidon不仅支持TCP、TLS over TCP和UDP协议,还通过协程(fibers)实现了高效的I/O多路复用,使得开发者能够轻松构建高并发...

gitblog_00801的博客 570

Tokio异步运行时与Web框架完美集成:axum和warp实战指南 [特殊字符]

Tokio作为Rust生态中最强大的异步运行时,为构建高性能网络应用提供了坚实基础。本文将深入探讨如何将Tokio与两大热门Web框架axum和warp进行无缝集成,帮助开发者构建可靠的异步Web应用。 ## 为什么选择Tokio作为Web应用基础? Tokio不仅仅是异步运行时,它提供了完整的异步I/O、网络编程、定时器和任务调度功能。作为Rust异步生态的核心,Tokio支撑着axum、w

gitblog_00001的博客 455

Tornado异步框架

tornado异步框架基础配置

m0_67345482的博客 719
上一篇: 实现线程内和线程间传值,合理使用ThreadLocal
下一篇: ss3ex与Lingo,ss3中spring security2使用的差别
iteye_6521
博客等级 码龄8年 0粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值