- 博客(15)
- 资源 (27)
- 收藏
- 关注
原创 mybatis——mapper文件详解
表结构:CREATE TABLE customer (id int(11) NOT NULL COMMENT '企业用户ID',name varchar(45) DEFAULT NULL COMMENT '名称',logo varchar(80) DEFAULT '' COMMENT '企业标识',describe varchar(500) DEFAULT '' COMMENT '企...
2019-09-27 18:04:33 13530
原创 安全性、活跃性已经性能问题
安全性并发编程是一个复杂的技术领域,微观上涉及到原子性问题、可见性问题和有序性问题,宏观则表现为安全性、活跃性以及性能问题。线程安全: 程序按照我们期望的执行如何才能写出线程安全的程序:避免出现原子性问题,可见性问题和有序性问题数据竞争: 当多个线程同时访问同一数据,并且至少有一个线程会写这个数据的时候,竞态条件:程序的执行结果依赖程序执行的顺序活跃性活锁: 线程之间相互谦让...
2019-09-25 12:21:09 976
原创 Java volatile关键字-禁用CPU缓存
可见性: 一个县城对共享变量的修改,另一个线程能够立刻看到。volatile的意义时禁用CPU缓存public class VolatileExample { int x = 0; volatile boolean v = false; public void writer(){ x = 42; v = true; } ...
2019-09-25 11:42:06 1326
原创 ForkJoin实现分而治之
对于简单的并行任务可以通过"线程池 Future"方案来解决。如果任务额之间有聚合关系(AND聚合或者OR聚合)用CompletableFuture解决。批量的并行任务用CompletionService解决。并发编程可以分为三个层面的问题: 分工,协作,互斥。ForkJoin有什么用Fork/Join是一个并行计算的框架,主要就是用来支持分治任务模型的,这个计算框架里的Fork...
2019-09-25 11:04:47 998
原创 CompletionService批量执行异步任务
CompletionService的实现原理也是内部维护了一个阻塞队列,当任务执行结束就把任务的执行结果加入到 阻塞队列中,不同的是CompletionService是把任务执行结果的Future对象加入到阻塞队列中CompletionService能做什么?将异步任务的结果保存到队列中,主线程从队列中取出这些结果数据执行。场景: 向不同电商平台询价,并保存价格采用“ThreadPool...
2019-09-25 10:45:10 1386
原创 CompletableFuture异步编程
CompletableFuture 有什么用CompletableFuture是用来描述多线程任务的时序关系的:串行关系,并行关系,聚合关系。CompletableFuture 是Java 8 新增加的Api,该类实现,Future和CompletionStage两个接口,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处...
2019-09-24 18:38:07 1110
原创 Smaphor(信号量)实现限流器
Semaphore信号量在管程被提出来之前用的是信号量。信号量模型一个计数器,一个等待队列,三个方法。计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来访问他们,这三个方法分别是:init()、down()、up()init():设置计数器的初始值down(): 计数器的值减1; 如果此时计数器的值小于0,则当前线程被阻塞,否则当前线程继续执行up(): 计数...
2019-09-24 18:01:12 661
原创 StampedLock悲观锁乐观锁
StampedLock java1.8提供的, 性能比ReadWriteLock好.语法 final StampedLock sl = new StampedLock(); /** * 悲观读锁 * 与ReadWriteLock的读锁相似 * 允许多个线程进行读操作 * 与写锁互斥 **/ //获取悲观锁 ...
2019-09-24 17:52:52 698
原创 计数器:CountDownLatch,循环栅栏:CyclicBarrier
// 创建2个线程的线程池 Executor executor = Executors.newFixedThreadPool(2);while(存在未对账订单){ // 计数器初始化为2 CountDownLatch latch = new CountDownLatch(2); // 查询未对账订...
2019-09-24 17:30:22 1173
原创 Java线程池ThreadPoolExecutor
创建对象仅仅在JVM的堆里为线程分配一块内存,而创建一个线程需要调用操作系统内核的API,然后操作系统要为线程分配一系列的资源。所以线程是一个重量级的对象,应该避免频繁的创建和销毁。线程池是一种生产者-消费者模式ThreadPoolExecutorThreadPoolExecutor的构造函数比较复杂,最完备的构造有7个参数。ThreadPoolExecutor( ...
2019-09-24 09:54:18 937
原创 ReadWriteLock读写锁
读写锁,分场景优化,提升性能。读写锁遵守的基本原则:允许多个线程同时读共享变量。只允许一个线程写共享变量。如果一个写线程正在执行写操作,此时禁止多线程读共享变量。读锁与写锁是互斥的;写锁与写锁也是互斥的。读写锁适用于读多写少的场景。读写锁与互斥锁的区别:读写锁运行多个线程同时读共享变量。ReadWriteLock 是一个接口,ReentrantReadWriteLock可...
2019-09-23 18:26:46 368
原创 java中的线程&创建线程的三种方式
java语言里的线程本质上就是操作系统的线程,他们是一 一对应的线程生命周期线程状态转换图—— 五态模型初始状态: 线程已经被创建,但是还没有分配CPU执行。 这个状态属于编程语言特有的,不过这里所谓的被创建,仅仅时在编程语言层面被创建,而在操作系统层面,真正的线程还没创建。可运行状态:初始状态线程执行start()方法,线程具备CPU的执行资格,没有CPU的执行权。 这种状...
2019-09-23 18:23:33 1064
原创 Lock和Condition(可重入锁)
Lock有别于synchronized隐式锁的三个特征:能够响应中断。支持超时和非阻塞地获取锁,也就是说lock比synchronized的功能丰富。JavaSDK并发包通过Lock和Condition两个接 口来实现管程,其中Lock用于解决互斥问题,Condition用于解决同步问题 。Lock接口的三个方法:// ⽀持中断的API void lockInterrupti...
2019-09-23 18:18:15 1387
原创 锁和synchronized
锁的常见概念互斥: 同一时刻只有一个线程执行临界区:一段需要互斥执行的代码细粒度锁: 用不同的锁对受保护资源进行精细化管理。 细粒度锁可以提高并行度,是性能优化的一个重要手段死锁 :一组互相竞争资源的线程因互相等待,导致“永久”阻塞的现象 。synchronizedclass X{ //修饰非静态方法 synchronized void foo(){ ...
2019-09-12 18:27:29 149
原创 并发编程三要素:原子性,有序性,可见性
并发编程三要素原子性:一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。有序性: 程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)可见性: 一个县城对共享变量的修改,另一个线程能够立刻看到。一、原子性线程切换会带来原子性的问题int i = 1; // 原子操作i ; // 非原子操作,从主内存读取 i 到线程工作内...
2019-09-12 16:06:29 5268 3
Jenkins持续集成与容器管理.pdf
2019-06-24
rabbitMQ教程
2019-01-23
Docker使用文档
2018-12-25
RabbitMQ使用文档.PDF
2018-12-20
深入浅出的学习MVC
2018-12-11
JVM优化|java虚拟机优化
2018-12-04
HttpClient 4.3教程.pdf
2017-09-20
fastDFS笔记
2017-09-18
FastDFS 架构剖析及配置优化
2017-09-18
pagehelper分页插件
2017-09-17
maven3.3.9
2017-09-17
pom约束文件
2017-09-17
dubbo-admin-2.5.4.war
2017-09-17
dubbo监控中心(dubbo-admin)使用与安装
2017-09-17
spring-boot-cli-1.4.0.BUILD-SNAPSHOT-bin.zip
2017-09-14
ActiveMQ_in_Action_中文.pdf
2017-09-11
Spring技术内幕:深入解析SPRING架构与设计原理
2017-09-11
[免费]Spring MVC学习指南(高清)
2017-09-11
深入理解Java虚拟机:JVM高级特性与最佳实践
2017-08-01
Spring-boot参考指南
2017-08-01
快乐的Linux命令行.pdf
2017-05-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人