12 2019 档案

摘要:一、前言 LockSupport工具类用于阻塞或唤醒线程。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程组阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具。 LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thr 阅读全文
posted @ 2019-12-30 21:38 王大军 阅读(259) 评论(0) 推荐(0)
摘要:前言 对于如何更合适的使用线程池,根据系统业务是CPU密集型 还是IO密集型。 cpu密集型: cpu使用率较高(也就是一些复杂运算,逻辑处理),所以线程数一般只需要cpu核数的线程就可以了。 这一类型的在开发中多出现的一些业务复杂计算和逻辑处理过程中。 I/O密集型: cpu使用率较低,程序中会存 阅读全文
posted @ 2019-12-30 18:08 王大军 阅读(548) 评论(0) 推荐(0)
摘要:读写锁简介 对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了。 读写锁ReentrantReadWriteLock,它表示两 阅读全文
posted @ 2019-12-30 17:01 王大军 阅读(219) 评论(0) 推荐(1)
摘要:前言 ReentrantLock即可重入锁,实现了Lock和Serializable接口 在java环境下ReentrantLock和Synchronized都是可重入锁 ReentrantLock构造函数中提供两种锁:创建公平锁和非公平锁(默认) ReentrantLock有三个内部类 Sync、 阅读全文
posted @ 2019-12-30 13:29 王大军 阅读(294) 评论(0) 推荐(0)
摘要:前言 为了对线程的统一管理分配,引入了线程池。我们来看看它的源码吧! 接口、类的关系 我们来看看Executor、ExecutorService、AbstractExecutorService Executor接口 Executor接口只有一个方法execute,传入线程任务参数 ExecutorS 阅读全文
posted @ 2019-12-29 23:59 王大军 阅读(163) 评论(0) 推荐(0)
摘要:线程池的继承架构 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 在JDK5之 阅读全文
posted @ 2019-12-29 21:53 王大军 阅读(948) 评论(0) 推荐(0)
摘要:前言 java中的线程池是运行场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。 合理使用线程池能够带来3个好处。 第一:降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三: 阅读全文
posted @ 2019-12-27 21:26 王大军 阅读(192) 评论(0) 推荐(0)
摘要:前言 线程组,顾名思义,就是线程的组,逻辑类似项目组,用于管理项目成员,线程组就是用来管理线程。 每个线程都会有一个线程组,如果没有设置将会有些默认的初始化设置 而在java中线程组则是使用类ThreadGroup 进行抽象描述 构造器 private ThreadGroup() { this.na 阅读全文
posted @ 2019-12-26 13:55 王大军 阅读(279) 评论(0) 推荐(0)
摘要:前言 Java.lang.Thread是Java应用程序员对Java多线程的第一站,Thread就是对Java线程本身的抽象 所以在Java中的线程编程概念中,一个Thread实例 == 一个线程 线程有哪些属性、行为,Thread大致就有哪些属性、行为。 源码 构造器 public Thread( 阅读全文
posted @ 2019-12-25 22:48 王大军 阅读(1237) 评论(0) 推荐(0)
摘要:前言 java语言内置对多线程的支持。那为什么使用多线程的?首先线程是操作系统最小的调度单元,多核心,多个线程可以同时执行,能够提升程序性能。但过多的线程也会导致问题(效率下降,死锁)。 一、线程简介 1.1 什么是线程 进程:现代操作系统运行一个程序时,会为其创建一个进程。(进程可认为是运行的程序 阅读全文
posted @ 2019-12-25 16:27 王大军 阅读(262) 评论(0) 推荐(0)
摘要:前言 本章大致分为四部分。 java内存模型的基础,介绍内存模型的相关基本概念; java内存模型中的顺序一致性,主要介绍重排序和顺序一致性; 同步原语,涉及synchronized,volatile,final三个同步原语的内存含义及重排序等; java内存模型的设计,涉及与内存模型和顺序一致性内 阅读全文
posted @ 2019-12-24 23:52 王大军 阅读(270) 评论(0) 推荐(0)
摘要:前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。 一、volatile的应用 在多线程并发编程中synchronized和volatile都扮演着重要的 阅读全文
posted @ 2019-12-23 20:29 王大军 阅读(323) 评论(0) 推荐(0)
摘要:前言 并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。进行并发编程时,会面临很多挑战,如上下文切换、死锁、受限于硬件和软件的资源限制问题等。 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CP 阅读全文
posted @ 2019-12-23 15:02 王大军 阅读(266) 评论(0) 推荐(0)
摘要:前言 我们成功创建Spring Boot之后,pom.xml坐标文件中都会有如下一段引用: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> 阅读全文
posted @ 2019-12-20 15:18 王大军 阅读(1727) 评论(0) 推荐(0)
摘要:由于直接使用double类型的加减乘除,可能会出现不可预测的问题,精度丢失等等。在业务中,计算金额是一件很重要的事情。 可以直接使用BigDecimal类,进行加减乘除。相关BigDecimal类介绍:https://blog.csdn.net/haiyinshushe/article/detail 阅读全文
posted @ 2019-12-16 22:04 王大军 阅读(504) 评论(0) 推荐(0)
摘要:import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.Da 阅读全文
posted @ 2019-12-16 21:55 王大军 阅读(640) 评论(0) 推荐(0)
摘要:import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.annotate.JsonSerialize; import java.io.Serializable; @JsonSerialize(i 阅读全文
posted @ 2019-12-16 19:43 王大军 阅读(542) 评论(0) 推荐(0)
摘要:前言 数据效验工作在开发工作中,是非常重要的,保证数据的正确性,可靠性,安全性。不仅在前端进行效验,还要在后台继续进行效验。 前端做验证只是为了用户体验,比如控制按钮的显示隐藏,单页应用的路由跳转等等。后端才是最终的保障。总之,一切用户的输入都是不可信的。 常见的验证方式 前端的校验是必须的,这个很 阅读全文
posted @ 2019-12-16 14:01 王大军 阅读(3595) 评论(0) 推荐(0)
摘要:简介 拦截器我想大家都并不陌生,最常用的登录拦截、权限校验、防重复提交、记录日志等等,总之可以去做很多的事情。 自定义拦截器HandlerInterceptorAdapter 我们以记录日志为例,介绍拦截器 1. preHandle:在业务处理器处理请求之前被调用,调用controller之前调用。 阅读全文
posted @ 2019-12-13 20:24 王大军 阅读(1008) 评论(0) 推荐(0)
摘要:前言 spring上下文是spring容器抽象的一种实现。将你需spring帮你管理的对象放入容器的一种对象,ApplicationContext是一维护Bean定义以及对象之间协作关第的高级接口。 获取spring的上下文环境ApplicationContext的方式 一)、通过WebApplic 阅读全文
posted @ 2019-12-13 19:54 王大军 阅读(2722) 评论(0) 推荐(0)
摘要:spring security关闭http验证 最近在跑demo的过程中,访问swagger页面的时候需要验证登录,记得在之前写的代码中是关闭了security验证,无需登录成功访问,直接在application.yml配置文件中添加上: management.security.enabled: f 阅读全文
posted @ 2019-12-10 22:18 王大军 阅读(2716) 评论(0) 推荐(0)
摘要:简介 zuul包含了对请求的路由和过滤两个最主要的功能 其中路由功能复杂将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求效验,服务聚合等功能的基础,Zuul和Eureka进行整个,将zuul自身注册为Eureka服务治理下的应用 阅读全文
posted @ 2019-12-09 21:58 王大军 阅读(154) 评论(0) 推荐(0)
摘要:简介 除了隔离依赖服务的调用意外,Hystrix还提供了准实时的调用健康(HystrixDashBoard),Hystrix会持续的记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等; Netflix通过hystrix-met 阅读全文
posted @ 2019-12-08 22:58 王大军 阅读(423) 评论(0) 推荐(0)
摘要:前言 Hystrix是一个用于处理分布式系统的延迟和容错和开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出现问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性; “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通 阅读全文
posted @ 2019-12-08 18:58 王大军 阅读(444) 评论(0) 推荐(0)
摘要:前言 Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的 阅读全文
posted @ 2019-12-07 21:01 王大军 阅读(194) 评论(0) 推荐(0)
摘要:简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。 下载安装 ElasticSea 阅读全文
posted @ 2019-12-07 16:19 王大军 阅读(593) 评论(0) 推荐(0)
摘要:Hystrix介绍 Hystrix是什么 在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。 Hy 阅读全文
posted @ 2019-12-06 20:32 王大军 阅读(358) 评论(0) 推荐(0)
摘要:简介 分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器。 Ribbon 是负载均衡器 ,它提供了很多负载均衡算法,例如轮询、随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发。 Ribbon常用负载均衡策略 Ribbon就属于进 阅读全文
posted @ 2019-12-05 23:56 王大军 阅读(133) 评论(0) 推荐(0)
摘要:前言 集群:多台服务器跑的都是一套完整的代码;(集群一般都是哨兵模式,一主二从) 环境搭建 新建springcloud-eureka-7002和springcloud-eureka-7003 ① pom文件 Eureka7002和Eureka7003两个pom文件,直接从Eureka7001中拷贝 阅读全文
posted @ 2019-12-05 19:32 王大军 阅读(157) 评论(0) 推荐(0)
摘要:前言 服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。 SpringCloud Eureka使用Netflix Eureka来实现服务注册和发现。它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,所以Eureka主要适用于通过 阅读全文
posted @ 2019-12-04 23:32 王大军 阅读(454) 评论(0) 推荐(0)
摘要:整理SpringCloud相关组件的demo,自己重新复习一下,做个记录。 首先搭建初始环境、公共模块。 一、创建一个父工程 springcloud 通过IDEA,使用maven方式创建一个父模块,将src文件删除,因为用不到。当然用不用的到 需要结合实际工作之中。 导入pom依赖 <?xml ve 阅读全文
posted @ 2019-12-04 21:32 王大军 阅读(287) 评论(0) 推荐(0)
摘要:简介 线程的控制就是程序对线程的主要管理,最重要的就是状态的切换维护。 每种转态都有不同的引发事件(对应线程的方法),每种状态又有各自不同的处理步骤和过程,整个线程控制主要就是涉及这些内容。 正文 线程等待与唤醒 所涉及到的方法:wait()、notify()、notifyAll()。 详细信息如下 阅读全文
posted @ 2019-12-04 16:16 王大军 阅读(341) 评论(0) 推荐(0)
摘要:学习之前,先了解线程状态图 说明:线程共包括以下5种状态。 1. 新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的sta 阅读全文
posted @ 2019-12-04 15:34 王大军 阅读(384) 评论(0) 推荐(0)
摘要:简介 简言之,现在的JDK线程模型基于操作系统原生线程,所以模型依赖于操作系统对线程的支持,另外Windows和Linux系统提供的线程模型就是一对一的 所以可以简单认为: 现在Java线程与操作系统线程一对一映射 现在的Java线程,就是操作系统中的线程 一些都是Thread:Thread是Jav 阅读全文
posted @ 2019-12-04 14:48 王大军 阅读(478) 评论(0) 推荐(0)
摘要:1. 简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作。AQS 是很多同步器的基础框架。 ReentrantLock、CountDownLatch 和 Semaphore 等都是基于 AQS 阅读全文
posted @ 2019-12-04 10:29 王大军 阅读(508) 评论(1) 推荐(0)
摘要:在分析原子类之前,先来了解CAS操作 CAS CAS,compare and swap的缩写,中文翻译成比较并交换。 CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。 无 阅读全文
posted @ 2019-12-03 09:36 王大军 阅读(344) 评论(0) 推荐(0)