Java并发
文章平均质量分 97
wanghowie
其实我想成为大牛
展开
-
Redis 与 Java API 学习与应用(一)
Redis基本介绍Redis简介高性能键值缓存服务器memcached也经常被拿来与Redis进行比较:这两者都可用于存储键值映射,性能也相差无几,但是Redis能够自动以两种不同的方式将数据写入硬盘,并且Redis除了能存储普通的字符串键 之外,还可以存储其他4种数据结构,而memcached只能存储普通的字符串键。这些不同之处使得Redis可以用于解决更为广泛的问题,并且既可以用作主数据库( primary database)使用,又可以作为其他存储系统的 辅助数据库( auxiliary da原创 2020-11-24 00:07:41 · 167 阅读 · 0 评论 -
Spring Batch学习与实践(二)
批处理通过Tasklet完成具体的任务,Chunk类型的Tasklet定义了标准的读、处理、写步骤。原创 2020-11-07 15:51:21 · 1012 阅读 · 0 评论 -
Spring Batch学习与实践(一)
简单介绍核心架构如下所示为Spring Batch的三层架构:应用层、核心层、基础架构层。应用层:包含所有批处理作业,通过Spring框架管理程序员自定义的代码; 核心层:包含Spring Batch启动和控制所需的核心类,如:JobLauncher、Job、Step等。 基础架构层:提供通用的读、写和服务处理。应用场景基本概念Job配置Step配置ItemReader、ItemWriter与ItemProcessorStep FlowJob健壮性并行.原创 2020-11-01 22:36:09 · 994 阅读 · 0 评论 -
Easy Rules core包 规则引擎
概述:1、依赖:可以只引入core包即可使用规则引擎;以引入easy-rules-support。支持XOR logic、json描述规则、yaml描述规则。如果要使用SpEL(Spring Expression Language)、MVEL(表达式解析器)则还需要引入easy-rules-spel[4.1.0开始引入]、easy-rules-mvel <dependency> <groupId>org.jeasy</groupId>原创 2020-09-04 00:03:24 · 1583 阅读 · 0 评论 -
责任链模式-优化系统元数据特殊处理
最近在工作中,涉及到元数据的特殊处理,由于系统需要兼容多级经销商和多组织模式;对于不同的租户类型、不同的业务控制方式、不同的登录用户,同一模块的元数据存在差异。注:此处的【元数据】用于构建前端界面的基本元素,前端调用服务获取元数据后构建界面...原创 2020-08-25 18:27:14 · 205 阅读 · 0 评论 -
JAVA程序性能优化--笔记2、设计模式:单例与代理
单例模式单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。Java语言中,这样的行为能带来两大好处:(1)对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。(2)由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。最简单的单例实现:public class Singleton { private Sin...原创 2020-07-23 20:10:30 · 145 阅读 · 0 评论 -
JAVA程序性能优化--笔记1、Java性能调优的相关知识概述
程序的性能通过以下几个方面来表现:执行速度:程序的反映是否迅速,响应时间是否足够短。 内存分配:内存分配是否合理,是否过多地消耗内存或者存在泄漏。 启动时间:程序从运行到可以正常处理业务需要花费多长时间。 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓。可以用于定量评测的性能指标有:执行时间:一段代码从开始运行到运行结束,所使用的时间。 CPU时间:函数或者线程占用CPU的时间。 内存分配:程序在运行时占用的内存空间。 磁盘吞吐量:描述I/O的使用情.原创 2020-07-10 13:59:16 · 155 阅读 · 0 评论 -
Java并发编程学习-日记12、Redis 和 Java
Redis的配置项清单如下:(1)port:端口配置项,查看和设置Redis监听端口,默认端口为6379。(2)bind:主机地址配置项,查看和绑定的主机地址,默认地址的值为127.0.0.1。(3)timeout:连接空闲多长要关闭连接,表示客户端闲置一段时间后,要关闭连接。如果指定为0,表示时长不限制。这个选项的默认值为0,表示默认不限制连接的空闲时长。(4)dbfilename:指定保存缓存数据库的本地文件名,默认值为dump.rdb。(5)dir:指定保存缓存数据的本地文件所存放原创 2020-06-01 00:05:05 · 211 阅读 · 0 评论 -
Java并发编程学习-日记11、ZooKeeper实现分布式命名服务器
命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 分布式命名服务器应用场景:分布式API目录:为分布式系统中各种API接口服务的名称、链接地址,提供类似JNDI(Java命名和目录接口)中的文件系统的功能。借助于ZooKeeper的树形分层结构就能提供分布式的API调用功能。著名的Dubbo分布式框架就是应用了ZooKeeper的分布式的JNDI功能。在Dubbo中,使用ZooKeepe.原创 2020-05-31 23:40:46 · 298 阅读 · 0 评论 -
Java并发编程学习-日记10、ZooKeeper
连接假死什么是连接假死呢?如果底层的TCP连接已经断开,但是服务器端并没有正常地关闭套接字,服务器端认为这条TCP连接仍然是存在。连接假死的具体表现如下:(1)在服务器端,会有一些处于TCP_ESTABLISHED状态的“正常”连接。(2)但在客户端,TCP客户端已经显示连接已经断开。(3)客户端此时虽然可以进行断线重连操作,但是上一次的连接状态依然被服务器端认为有效,并且服务器端的资源得不到正确释放,包括套接字上下文以及接收/发送缓冲区。连接假死通常是由以下多个原因造原创 2020-05-24 16:18:23 · 255 阅读 · 0 评论 -
Java并发编程学习-日记9、JSON 与 Protobuf
1、JSON:Jackson开源库的优点是:所依赖的jar包较少、简单易用、性能也还不错,另外Jackson社区相对比较活跃。 Jackson开源库的缺点是:对于复杂POJO类型、复杂的集合Map、List的转换结果,不是标准的JSON格式,或者会出现一些问题。 Gson可以完成复杂类型的POJO和JSON字符串的相互转换,转换的能力非常强。 从性能上说,FastJson库采用独创的算法,将JSON转成POJO的速度提升到极致,超过其他JSON开源库。在POJO序列化成JSON字符串的应用场景原创 2020-05-24 15:46:28 · 299 阅读 · 0 评论 -
Java并发编程学习-日记8、netty的编码和解码
Netty解码器ByteToMessageDecoder一个标准的解码器将输入类型为ByteBuf缓冲区的数据进行解码,输出一个一个的Java POJO对象。Netty内置了这个解码器,叫作ByteToMessageDecoder,位在Netty的io.netty.handler.codec包中。所有的Netty中的解码器,都是Inbound入站处理器类型,都直接或者间接地实现了ChannelInboundHandler接口。ByteToMessageDecoder解码的流程,大致具体可以描述原创 2020-05-24 15:22:39 · 551 阅读 · 0 评论 -
Java并发编程学习-日记7、第二个netty程序回显服务器
代码示例: public class NettyEchoServer { private final int serverPort; ServerBootstrap b = new ServerBootstrap(); public NettyEchoServer(int port) { this.serverPort = port; } public void runServer() { ...原创 2020-05-24 14:39:36 · 307 阅读 · 0 评论 -
Java并发编程学习-日记6、Netty基础知识点
Netty的服务启动类ServerBootstrap:Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务器端的Netty组件的组装,以及Netty程序的初始化。它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景的需要,为组件设置好对应的参数,最后实现Netty服务器的监听和启动。Netty中的各种组件:服务器启动器、缓冲区、反应器、Handler业务处理器、Future异步任务监听、数据传输通道。原创 2020-05-23 21:52:19 · 618 阅读 · 0 评论 -
Java并发编程学习-日记5、Netty从DiscardServer实践开始
DiscardServer所示,创建netty服务端,一共有8步,重点在:监控事件的线程组、通道及通道参数、出入站的处理器(绑定在流水线上)、异步监控事件处理 public class NettyDiscardServer { private final int serverPort; /* Netty的服务启动类ServerBootstrap,它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景...原创 2020-05-22 23:33:22 · 221 阅读 · 0 评论 -
Java并发编程学习-日记4、 Future异步回调
JION join操作的原理是:阻塞当前的线程,直到准备合并的目标线程的执行。在Java中,线程(Thread)的合并流程是:假设线程A调用了线程B的B.join方法,合并B线程。那么,线程A进入阻塞状态,直到B线程执行完成。(1)join是实例方法,不是静态方法,需要使用线程对象去调用,如thread.join()。(2)join调用时,不是线程所指向的目标线程阻塞,而是当前线程阻塞。(3)只有等到当前线程所指向的线程执行完成,或者超时,当前线程才能重新恢复执行。(4)join有...原创 2020-05-20 20:51:49 · 643 阅读 · 0 评论 -
Java并发编程学习-日记3、Reactor反应器模式
本博文记录了学习Reactor反应器模式的一些笔记。java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章——《Scalable IO in Java》,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的过程中服务模型的演变与进化,文章中基于Reactor反应器模式的几种服务模型架构,也被Netty、Mina等大多数高性能IO服务框架所采用。所以可以仔细拼读一下《Scalable IO...原创 2020-05-19 22:17:34 · 293 阅读 · 0 评论 -
Java并发编程学习-日记2、NIO实现Discard服务器实践
源码分析: ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。 通过ServerSocketChannel.accept()方法监听新进来的连接。当accept()方法返回的时候,它返回一个包含新进来的连接的SocketChannel。 ServerSocketChannel可以设置成非阻塞模式:serverSocketChannel.configureBlocking(false);在非阻塞模式下,accept(...原创 2020-05-18 21:56:08 · 253 阅读 · 0 评论 -
Java并发编程学习-日记1、常见的IO模型、NIO、OIO
常见的IO模型:1、同步阻塞IO(Blocking IO): 在Java中,默认创建的socket都是阻塞。同步IO,是一种用户空间与内核空间的IO发起方式。同步IO是指用户空间的线程是主动发起IO请求的一方,内核空间是被动接受方。异步IO则反过来,是指系统内核是主动发起IO请求的一方,用户空间的线程是被动接受。阻塞IO的特点及优缺点:阻塞IO的特点是:在内核进行IO执行的两个阶段,用户线程都被阻塞。 阻塞IO的优点:应用的程序开发非常简单;在阻塞等待数据期间,用户线程挂起。在阻塞期间,用户线程原创 2020-05-18 21:17:33 · 597 阅读 · 0 评论