并发程序设计
Kevin照墨
这个作者很懒,什么都没留下…
展开
-
Java并发——AQS
1、Lock与AQS与CAS的关系Lock面向用户,AQS面向Lock,也就是说AQS为各种Lock提供了底层的支持,AQS的最核心原理之一就是利用CAS更新同步状态。2、AQS介绍AQS是AbustactQueuedSynchronizer的简称,它是一个Java提供的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Ja...原创 2020-02-12 14:33:15 · 234 阅读 · 0 评论 -
Java锁优化
1、总述我们知道Java的锁有两种形式:一是synchronized,它是由JVM底层实现的,是java语言的关键字,底层是依赖对象内部的monitor锁来实现的,而monitor又依赖操作系统的MutexLock(互斥锁)来实现的,所以在JDK6.0之后,java对synchronized进行了优化,即引出了 偏向锁、轻量级所、自旋锁等概念。二是重入锁lock,它是jdk实现的一个接口,...原创 2020-02-11 13:54:03 · 158 阅读 · 0 评论 -
线程池
1.定义线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。作用:能够极大地减少某些线程的频繁创建和销毁带来的时间开销比如说项目中使用到了thrift,client会向server发起大量并发请求,如果每次...原创 2020-02-07 16:18:44 · 185 阅读 · 0 评论 -
Java并发——阻塞队列的实现
1.使用场景阻塞的应用场景,比如 生产-消费模式,限流统计等等。什么 ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue 等等,都是阻塞队列的实现。但是我们发现其使用目的和消息队列类似,实际上是的,只是阻塞队列是用于单个系统的消息传递,生产者消费者模式,而消息队列一般是分布式系统间的生产者消费者模式,但无论是哪种形式,其实现都离不开基本的多线程同...原创 2020-02-07 11:12:31 · 307 阅读 · 0 评论 -
Thrift采坑记录——Client多线程
一、Thrift 采坑Thrift 的Server/Client有个较为严重的bug(https://issues.apache.org/jira/browse/THRIFT-601 ),随机向thrift sever的监听端口发些数据,可能会导致Server OutOfMemory,细细看看代码,这个bug有点土。Thrift Client线程不安全,多线程下使用可能导致Serve...原创 2020-01-03 18:03:07 · 2775 阅读 · 0 评论 -
Java并发——synchronized
synchronized便是java的锁(本地锁),只能作用于一个共享实例对象,若被加锁的对象,存在多个实例的可能,仍然会造成并发安全性问题,若想要解决这种多实例并发的问题,可以采取分布式锁或者信号量机制。synchronized的三种应用方式,Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前...原创 2019-12-28 17:47:52 · 169 阅读 · 0 评论 -
Java并发——volatile详解+JMM内存模型
https://www.jianshu.com/p/8755e8fd1d20补充说明,缓存和内存的一致性问题:1.在学习计算机组成原理时,我们知道,修改了缓存的数据后,有如下3中写回策略:(1)写回法当CPU写Cache命中时,只修改Cache的内容,而不立即写入主存;只有当此行被替换出时才写回主存。优点:减少了访问主存的次数。缺点:存在不一致性的隐患。解决问题:每个Cache行必须...原创 2019-12-27 17:44:23 · 183 阅读 · 0 评论 -
Java并发——条件变量
1.定义在操作系统——多线程同步互斥一文中已详细介绍过了条件变量及其使用注意事项。条件变量,是为了解决等待同步需求,实现线程间协作通信的一种机制。条件变量用来自动阻塞一个线程,直到某特殊情况发生唤醒该线程为止。通常条件变量和锁机制同时使用。2.Java中的条件变量2.1 synchronized + wait()、notify()、notifyAll()线程A(消费者):synchron...原创 2019-12-25 17:56:01 · 1224 阅读 · 0 评论 -
并发下的容器(ArrayList、HashMap)安全问题
最近在做项目的是后遇到了并发安全问题,当多个线程操作ArrayList、HashMap等数据结构时造成了数据不一致,或者莫名其妙的异常,最后查阅资料发现是本身这些数据结构的并发安全问题导致的。1.ArrayList我们知道ArrayList底层仍是数组模拟:add操作实际上是数组赋值,然后指针++操作另外当容量超过初始容量时会自动进行容量扩展,底层实现即通过copy方式将现在的数组cop...原创 2019-10-22 11:46:45 · 343 阅读 · 0 评论