
并发与并发编程
镜水灵动
读万卷书、行万里路、阅人无数、高人指路、贵人相助和自己去悟。
展开
-
使用多线程来提高服务性能Future模式
方法一:创建一个子线程来运行主线程逻辑。@RequestMapping("/order2") public Callable<String> order2() throws Exception { logger.info("主线程开始"); Callable<String> result = new Callable<String>() { @...原创 2018-02-18 10:19:08 · 340 阅读 · 0 评论 -
springboot2.0.3整合zookeeper实现分布式锁
1.zookeeper安装curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://193f7471.m.daocloud.iodaocloud123zkCli.sh -server 127.0.0.1:3001 create /minitest hellominiget /adminls /admindel...原创 2018-08-01 10:31:46 · 8159 阅读 · 0 评论 -
初识Executor框架
一:线程池中线程的状态:1.当线程池处于Running状态可以接受新提交的任务并且可以处理阻塞队列的任务。2.处于SHUTDOWN状态的时候不能接受新提交的任务但是可以处理阻塞队列的任务。3.STOP不接受新任务也不处理队列中的任务。4.TIDYING当线程池所有任务都终止了有效线程数为0.5. TIDYING状态的线程调用terminated方法进入TERMINATED状态。Execute():...原创 2018-05-15 23:48:49 · 247 阅读 · 0 评论 -
初始线程池
一:使用线程的方法:new Thread弊端(1)每次new Thread新建对象,性能比较差。(2)线程缺乏同一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或OOM(3)缺少更多功能,如更多执行,定期执行,线程中断。线程池:(1)重用存在的线程,减少对象的创建,消亡的开销。性能更好。(2)可以有效控制并发线程数量,提高系统资源的利用率,同时可以避免过多资源竞争,避免阻塞。...原创 2018-05-15 23:17:47 · 160 阅读 · 0 评论 -
CompletableFuture集合threadPool来提高并发处理
CompleteableFuture基于jdk8。提高程序吞吐量,异步处理请求。public class Shop { Random random = new Random(); private String name; public String getName() { return name; } public void setName(String name) {...原创 2018-05-20 09:38:16 · 11064 阅读 · 8 评论 -
深入分析synchronized的实现原理
原文地址:http://cmsblogs.com/?p=2071记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于...转载 2018-04-12 12:22:21 · 147 阅读 · 0 评论 -
深入分析volatile的实现原理
原文来源:http://cmsblogs.com/?p=2092通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:Java编程...转载 2018-04-12 09:27:31 · 116 阅读 · 0 评论 -
java并发编程cas
1. cas1.1什么是casCAS: 全称Compare andswap,字面意思:”比较并交换“,一个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A(对象栈中存放的值),需要修改的新值B。(1) 比较 A 与 V 是否相等。(比较)(2)如果比较相等,将 B 写入 V。(交换)(3)返回操作是否成功。1.2 CAS 是怎么实现的跟随AtomInteger的代码我们一路往...原创 2018-03-26 09:22:00 · 357 阅读 · 0 评论 -
并发与高并发
一.并发编程基础1.1CPU多级缓存 (1)cpu缓存cpu从缓存中取数据,缓存中取不到通过主线去主存储(硬盘等取数据)。缓存的出现大大加快了cpu的读写效率。随着发展出现了多级缓存(一级,二级,三级等)。缓存的出现主要是为了解决cpu运算速度与内存读写速度不匹配的问题。(2)cpu缓存的意义时间局部性:如果一个数据被访问,那么在不久的将来他很可能再被访问。空间局部性:如果一个数据被...原创 2018-03-30 07:51:36 · 452 阅读 · 0 评论 -
Spring MVC异步处理-Future模式
主线程开启一个子线程,子线程在处理一个非常耗时的任务,主线程就会立即返回一个Future对象。这个Future对象有一个成员变量result,子线程和主线程共享这个Future对象。如果主线程,在子线程没有处理业务之前调用Future.getResult方法,则会发生阻塞。而子线程处理业务完成之后,会执行Future.setResult方法,此时Future对象的锁属于子线程。子线程执行setRe...转载 2018-02-18 22:03:26 · 2353 阅读 · 0 评论 -
从OpenJdk分析Object,wait(),notify(),notifyAll()
我们知道多线程争抢临界资源,首先先进入entryList队列,然后去争抢实例对象对应的监视器的锁,例如下图ObjectMonitor结构。waitSet是监视器上等待的线程集合。自己获得锁之后调用wait()方法。EntryList是阻塞线程集合。ObjectWaiter是链表结构。(1)wait源码解析 void ObjectMonitor::wait(j...原创 2019-08-21 23:45:03 · 313 阅读 · 0 评论