- 浏览: 299611 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- Tomcat (3)
- ZooKeeper (1)
- Maven (11)
- opensource (1)
- DataBase (5)
- UML (8)
- linux (87)
- Java (32)
- 算法 (3)
- Redis (1)
- HBase (2)
- 产品 (1)
- 模板引擎 (1)
- Eclipse (10)
- JUnit (5)
- Log4j (8)
- XML (2)
- JSON (1)
- SpringMVC (23)
- Spring (24)
- TCP/IP (4)
- Windows (10)
- Web Service (1)
- 源码版本管理 (1)
- Word (1)
- Test (1)
- Mybatis (7)
- CentOS (2)
- 多线程 (2)
- Web (7)
- Servlet (3)
- JavaWeb (4)
- MySQL (7)
- 汇编语言 (2)
- linux Shell (4)
- GIT (4)
- Python (1)
- 并发 (4)
- 编程通用 (1)
- JavaScript (1)
- 异常 (3)
- 自动化部署 (1)
- 大数据 (1)
- hive (2)
- 文本编辑器 (2)
- MINA (0)
- intellij IDEA (9)
- masm (0)
- blockchain (1)
- docker (2)
- IDEA (0)
- GO (3)
- nginx (1)
- springBoot (3)
- Websocket (2)
- macOS (1)
最新评论
-
woodding2008:
ss –pl 可以查看监听方式启动的端口以及pid
根据端口查PID,根据PID查进程名称 -
masuweng:
恩很试用,也很常用。
linux 常用命令
from: https://www.cnblogs.com/chenmo-xpw/p/5652029.html
1、场景
最近做项目的时候遇到了一个小问题:从前台提交到服务端A,A调用服务端B处理超时,原因是前端一次请求往db插1万数据,插完之后会去清理缓存、发送消息。
服务端的有三个操作 a、插DB b、清理cache c、发送消息。1万条数据,说多不多,说少不少.况且不是单单insert。出现超时现象,不足为奇了吧~~
2、分析
如何避免超时呢?一次请求处理辣么多数据,可分多次请求处理,每次请求处理100条数据,可以有效解决超时问题. 为了不影响用户的体验,请求改为ajax 异步请求。
除此之外,仔细分析下场景. a 操作是本次处理的核心. 而b、c操作可以异步处理。换句话说,a操作处理完可以马上返回给结果, 不必等b、c处理完再返回。b、c操作可以放在一个异步任务去处理。
3、实战
(1)、ExecutorService : 任务提交
(2)、demo
异步任务类
复制代码
public class ExecutorDemo {
private ExecutorService executor = Executors.newFixedThreadPool(1);
public void asynTask() throws InterruptedException {
executor.submit(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);//方便观察结果
} catch (InterruptedException e) {
e.printStackTrace();
}
int sum = 0;
for(int i = 0; i < 1000; i++) {
sum += i;
}
System.out.println(sum);
}
});
}
}
复制代码
客户端模拟
复制代码
public class Client {
public static void main(String[] args) throws InterruptedException {
boolean r = task2();
if(r) {
task3();
}
System.out.println("------------main end-----------");
}
static boolean task2() throws InterruptedException {
ExecutorDemo e = new ExecutorDemo();
e.asynTask();
System.out.println("------------task2 end-----------");
return true;
}
static void task3() throws InterruptedException {
int j = 0;
while(true) {
if(j++ > 10000) {
break;
}
}
System.out.println("------------task3 end-----------");
}
}
复制代码
结果是酱紫的
------------task2 end-----------
------------task3 end-----------
------------main end-----------
499500
我们来分析下结果, task2是个异步任务,执行到task2,主线程不会在task2 阻塞,不用等待task2 处理完,可以往下执行task3.
1、场景
最近做项目的时候遇到了一个小问题:从前台提交到服务端A,A调用服务端B处理超时,原因是前端一次请求往db插1万数据,插完之后会去清理缓存、发送消息。
服务端的有三个操作 a、插DB b、清理cache c、发送消息。1万条数据,说多不多,说少不少.况且不是单单insert。出现超时现象,不足为奇了吧~~
2、分析
如何避免超时呢?一次请求处理辣么多数据,可分多次请求处理,每次请求处理100条数据,可以有效解决超时问题. 为了不影响用户的体验,请求改为ajax 异步请求。
除此之外,仔细分析下场景. a 操作是本次处理的核心. 而b、c操作可以异步处理。换句话说,a操作处理完可以马上返回给结果, 不必等b、c处理完再返回。b、c操作可以放在一个异步任务去处理。
3、实战
(1)、ExecutorService : 任务提交
(2)、demo
异步任务类
复制代码
public class ExecutorDemo {
private ExecutorService executor = Executors.newFixedThreadPool(1);
public void asynTask() throws InterruptedException {
executor.submit(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);//方便观察结果
} catch (InterruptedException e) {
e.printStackTrace();
}
int sum = 0;
for(int i = 0; i < 1000; i++) {
sum += i;
}
System.out.println(sum);
}
});
}
}
复制代码
客户端模拟
复制代码
public class Client {
public static void main(String[] args) throws InterruptedException {
boolean r = task2();
if(r) {
task3();
}
System.out.println("------------main end-----------");
}
static boolean task2() throws InterruptedException {
ExecutorDemo e = new ExecutorDemo();
e.asynTask();
System.out.println("------------task2 end-----------");
return true;
}
static void task3() throws InterruptedException {
int j = 0;
while(true) {
if(j++ > 10000) {
break;
}
}
System.out.println("------------task3 end-----------");
}
}
复制代码
结果是酱紫的
------------task2 end-----------
------------task3 end-----------
------------main end-----------
499500
我们来分析下结果, task2是个异步任务,执行到task2,主线程不会在task2 阻塞,不用等待task2 处理完,可以往下执行task3.
发表评论
-
彻底理解ThreadLocal
2019-06-24 21:14 320https://www.cnblogs.com/xzwblog ... -
Java多线程编程(3)-对象共享
2018-01-12 17:31 3631 可见性 (1)失效数据 (2)非原子的64位操作 (3)加 ... -
Java多线程编程 - 前言
2018-01-01 17:56 0记录自己学习多线程点点滴滴。 很多书籍写的理论性比较多,重复 ... -
深入理解并发之CompareAndSet(CAS)
2017-12-30 21:55 560http://flychao88.iteye.com/blog ... -
Java中堆内存和栈内存详解
2017-12-24 11:12 0https://www.cnblogs.com/iliuyue ... -
查看class文件的jdk版本
2017-11-14 22:34 629准备好要查看的class文件,本例使用Tools ... -
mave打包编译java生成的jdk版本 / Maven项目在刷新/导入项目时jdk版本过低的解决方案
2017-08-31 21:23 10591 pom.xml 决定代码版本 <plugin> ... -
Java安全框架—Shiro Apache 的孵化器项目Shiro其前身是JSecurity
2017-01-02 23:34 402from http://blog.csdn.net/pete ... -
Lombok 安装、入门 - 消除冗长的 java 代码
2016-12-26 16:30 417from: http://www.blogjava.net/f ... -
线程池系列三:结合线程池实现Socket
2016-12-23 21:03 988from : http://zy116494718.itey ... -
线程池系列二:ThreadPoolExecutor讲解
2016-12-23 21:02 571from: http://zy116494718.iteye ... -
线程池系列一:线程池作用及Executors方法讲解
2016-12-23 21:01 1252from : http://zy116494718.i ... -
applicationContext.xml 和 springmvc-servlet.xml 配置文件加载顺序
2016-12-20 15:32 783applicationContext.xml是随Context ... -
linux下分析Java程序内存汇总
2016-12-05 08:56 857http://blog.csdn.net/zlzlei/ar ... -
JVM:查看java内存情况命令
2016-12-05 08:54 1174https://my.oschina.net/u/138514 ... -
使用JMAP dump及分析dump文件
2016-12-05 08:50 1563from http://www.cnblogs.com/ ... -
Netty
2016-11-18 09:48 475Netty是由JBOSS提供的一个java开源框架。Netty ... -
常见Java Web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)
2016-11-08 14:55 2711web 容器比较 tomcat jboss resin web ... -
什么是线程安全和线程不安全
2016-10-25 16:21 480from : http://www.cnblogs.com/z ... -
Spring加载resource时classpath*:与classpath:的区别
2016-10-19 10:14 970from : http://blog.csdn.net/ ...
相关推荐
### Java异步消息处理知识点详解 #### 一、适应不同类型的请求 在Java异步消息处理中,系统设计需要能够适应不同类型的请求。这通常包括两种类型:一种是有返回值的请求,另一种是没有返回值的请求。 - **有...
Java异步编程框架Promise是用于处理异步操作的一个重要工具,尤其在Java中,Promise的概念被广泛应用于多种场景下进行高效的数据处理和结果获取。Promise框架主要作用在于简化异步编程模型,使其更加易于理解和使用...
Java异步调用转同步方法实例详解 Java异步调用转同步方法实例详解是指在Java中将异步调用转换为同步调用的技术,主要用于解决异步调用过程中的阻塞问题。异步调用是一种非阻塞的调用方式,调用方在调用过程中,不...
Java中的HTTP异步请求是一种高效的网络通信方式,它允许程序在发送HTTP请求后不等待响应,而是立即继续执行其他任务,当服务器响应时,通过回调函数处理结果。这种方式避免了同步请求时线程阻塞的问题,提高了应用的...
在现代应用中,高效地处理并发任务是至关重要的,Spring为此提供了异步任务处理的功能,可以显著提升系统的响应速度和性能。本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。...
Java异步通信是一种提高应用程序效率和响应速度的技术,它允许程序在等待IO操作完成时执行其他任务,而不是阻塞等待。在这个示例中,我们主要关注的是Java NIO(非阻塞I/O)和异步Socket。NIO是Java SE 1.4引入的一...
Java并发包中的`ExecutorService`接口和`Future`接口是实现异步任务的重要工具。`ExecutorService`管理线程池,负责调度和执行任务;`Future`接口表示异步计算的结果,可以用来检查任务是否完成,获取结果或者取消...
### Java异步技术原理与实践 #### 一、引言 在现代软件开发尤其是微服务架构下,系统之间复杂的依赖关系和技术挑战日益增加。本文旨在深入探讨Java中的异步技术,包括其背后的原理以及如何在实际场景中运用这些...
Java 8引入的CompletableFuture提供了一种更高级的异步编程模型,支持链式调用和组合多个异步任务。 总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者...
它可以构建复杂的异步任务链,支持链式调用,如`thenApply()`, `thenAccept()`, `thenCompose()`等,可以轻松实现同步和异步操作的组合。 7. **异步IO(NIO)** Java的非阻塞I/O模型,如`java.nio`包,允许在等待I...
本程序提供了一个多任务多线程异步处理框架。该框架使用简单,用户只需要继承抽象类Task,构建自己的任务类,再构造一个任务源,就可以轻松使用这个框架。 程序包里提供了一个例子Mytask 和MyTaskGenerator, 用户只...
本文将深入探讨Java和Android平台上的异步编程小技巧,并以"android业务异步编程小技巧.zip"和"java业务异步编程小技巧.zip"中的示例作为参考,讲解如何有效地进行异步任务处理。 首先,我们要理解Android应用中的...
在IT行业中,异步任务处理是一项关键的技术,它在提高应用程序性能、优化资源利用和提升用户体验方面发挥着重要作用。在“Ansync Test 异步任务带有详细注释”这个项目中,我们可以深入学习如何实现和管理异步操作,...
在Java编程中,异步加载图片是一项常见的任务,特别是在开发Android或者Web应用时,为了提高用户体验,我们需要在后台线程中加载图片,而不是阻塞主线程。本篇将深入讲解如何利用Java原生类实现Http异步加载图片的...
在Java中,通常通过Future和Callable接口实现异步计算,或者使用ExecutorService和CompletionService来管理和控制异步任务。 三、ExecutorService与ThreadPoolExecutor ExecutorService是Java并发框架中的核心接口...
2. **异步编程模型**:通过Future和Callable可以实现异步任务的提交和结果获取,进一步提高程序的整体性能。 3. **网络请求处理**:利用HTTPURLConnection可以轻松地发起GET和POST请求,并处理响应数据。 综上所述...
智能点评系统和多阶段异步任务处理框架是现代IT领域中的关键组成部分,尤其在后端开发中扮演着重要角色。这两个概念涉及的技术广泛且深入,下面将分别进行详细阐述。 智能点评系统通常指的是利用人工智能技术收集、...
而异步请求则不同,它允许程序在等待响应的同时继续执行其他任务,提高程序效率。HttpClient库通过提供非阻塞I/O(NIO)支持实现了异步请求。 以下是一个使用HttpClient进行异步请求的Java示例: ```java import ...
`Future`和`Callable`是Java中实现异步任务的基础组件之一。`Callable`是一个可以返回结果的接口,而`Future`则是用于获取这些结果的接口。 #### 示例代码解析 ```java //示例一 int threadNum = 3; List...
`Params`代表异步任务执行时需要输入的参数类型,`Progress`表示后台任务执行过程中的进度类型,而`Result`则是任务执行完成后返回的结果类型。 `AsyncTask`包含四个关键方法: 1. `onPreExecute()`:在执行后台...