java并发
文章平均质量分 91
herokang
会飞的猿
展开
-
synchronized原理及优化
引用自 https://mp.weixin.qq.com/s?__biz=MzI5NTYwNDQxNA==&mid=2247483816&idx=1&sn=16c0f7f48bddb2d7ca6546d1cf0f20b2&scene=19#wechat_redirect 记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来...转载 2019-04-12 22:12:32 · 152 阅读 · 0 评论 -
多线程基础(七)CountDownLatch与CyclicBarrier
1. CountDownLatch CountDownLatch的作用是,新建CountDownLatch时可以指定count计数器数,每调用一次countDownLatch.countDown();计数器减一,countDownLatch.await();方法会阻塞知道计数器值为0才会往下执行。 一般可用于某n个线程等待其它n个线程执行完毕才执行。如下示例 public class CountD...原创 2019-08-17 23:04:39 · 217 阅读 · 0 评论 -
多线程基础(五)线程池
1. ThreadPoolExecutor 虽然Executors框架提供了好多创建线程的方法,比如: 但是我们并不推荐大家使用这些方法,阿里开发规范也有一条:创建线程池建议大家使用ThreadPoolExecutor类,我们看一下Executors源码这些创建方式底层都是对ThreadPoolExecutor类的封装 public static ExecutorService newFixed...原创 2019-08-17 19:16:36 · 200 阅读 · 0 评论 -
多线程基础(四)Lock
1. Lock Lock的实现原理和Synchronized完全不同,它使用compare and swap理念,如果符合cas判定逻辑,那么就修改state状态,把当前线程设定为独占,无法获取锁就加入到等待队列。 2. Lock实现同步 import java.util.concurrent.locks.ReentrantLock; public class ThreadTest2 { ...原创 2019-08-16 23:01:46 · 221 阅读 · 0 评论 -
多线程基础(三)ThreadLocal
多个线程共享变量可以使用static实现,那如果想实现每个线程有自己的共享变量怎样实现呢? 我们先来讨论一个实际问题: web后台项目用户登录后操作网数据库插入一条数据,我们不希望在controller、service、dao之间显式的定义参数传递用户名等信息,我们可以在登录拦截器里把校验后的用户信息保存到一个地方,然后再dao层直接取出,这样插入数据的时候就可以知道是谁操作的,这个功能可以使用T...原创 2019-08-14 23:01:04 · 145 阅读 · 0 评论 -
多线程基础(二)
本篇文章为知识点复习总结,初学者相关示例可以自己写代码测试一下 1. 悲观锁与乐观锁 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样当第二个线程想拿这个数据的时候,第二个线程会一直堵塞,直到第一个释放锁,他拿到锁后才可以访问。传统的数据库里面就用到了这种锁机制,例如:行锁,表锁,读锁,写锁,都是在操作前先上锁。java中的synchronize...原创 2019-08-14 14:37:58 · 169 阅读 · 0 评论 -
多线程基础(九)信号量Semaphore——[ˈseməfɔːr]
1. Semaphore----[ˈseməfɔːr] 信号量可以理解为限流算法令牌算法里的令牌池,他是对锁的扩展,无论synchronized还是Lock一次只允许一个线程访问资源,而Semaphore内部维护了一个信号量计数器,当线程访问资源时将计数器减一,访问完毕后计数器加一,当计数器减到0时再有线程来获取锁将会等待,当有一个线程执行完毕释放锁后计数器加一不为0,此时等待的线程可以获取锁并把...原创 2019-08-18 19:57:00 · 259 阅读 · 0 评论 -
多线程基础(八)并发数据结构并发容器
1. 并发List Vector和CopyOnWriteArrayList,是两个并发list的实现 CopyOnWriteArrayList:实现原理是利用了对象的不变性,当没有进行写操作时,不加锁,当有写操作时先复制一份对象副本,然后进行修改,最后保存时加锁,通过以上方式减少锁竞争,从原理来看比较适合读多写少场景。 Vector:读和写都试用了synchorinized关键字,高并发读写下性能...原创 2019-08-18 19:09:09 · 145 阅读 · 0 评论 -
多线程基础(一)
1. currentThread与sleep Thread.currentThread()、this.currentThread()、currentThread()效果都是一样的,指的是拿到运行当前代码的线程对象 编写如下代码 public class MyThread extends Thread { public MyThread() { System.out.prin...原创 2019-08-13 17:11:55 · 132 阅读 · 0 评论 -
Java并发-AQS及各种Lock锁的原理
转载: Java并发-AQS及各种Lock锁的原理 面试准备 — CAS 和 AQS转载 2019-08-28 22:30:10 · 134 阅读 · 0 评论