![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发学习
文章平均质量分 80
小气鬼Sweet
乘风破浪会有时,,直挂云帆济沧海
展开
-
深入理解ThreadLocal
深入理解ThreadLocal原创 2017-09-25 20:53:28 · 212 阅读 · 0 评论 -
java并发中的CAS
CAS(Compare And Swap)简单介绍 CAS实现原子方式操作。java中锁可以分为两大类,乐观锁和悲观锁。乐观锁不是指哪种锁,而是一种实现线程安全的不加锁策略。而CAS实现了这个策略,先进行操作,如果没有其他线程争用共享数据,那操作就成功了,如果共享数据有争用,产生冲突,则采取其他的补偿措施,这个措施一般是不断调用那个方法,或者放弃调用 CAS执行函数: CAS(V,E,N)原创 2017-11-25 20:11:07 · 543 阅读 · 0 评论 -
synchronized的实现原理及jvm对其优化
synchronized的使用方式 1)在普通方法前面加锁,锁是当前实例对象,即调用该方法的对象 2)在静态方法前面加锁,锁是当前类的Class对象 3)同步代码块中,锁是synchronized括号里配置的对象jvm对其实现的原理 jvm基于进入和退出monitor对象来实现方法同步和代码块同步。monitorenter指令在编译以后插入到同步代码块的开始位置,monitorexit指令插原创 2017-11-23 21:09:23 · 589 阅读 · 0 评论 -
Synchronized和ReentrantLock的区别
昨天面试,面试官问了自己一个synchronized和ReentrantLock的区别,感觉自己回答的并不是特别好,今天在翻书学习总结一下,毕竟书读百遍其义自见。开始进入正题 两者的共同点: 1)协调多线程对共享对象、变量的访问 2)可重入,同一线程可以多次获得同一个锁 3)都保证了可见性和互斥性 两者的不同点: 1)ReentrantLock显示获得、释放锁,synchronized隐原创 2017-12-08 19:28:54 · 1239 阅读 · 0 评论 -
java消费者生产者问题
java消费者生产者问题1.使用wait()和notify()模拟 2.使用BlockingQueue模拟原创 2017-10-02 21:34:43 · 288 阅读 · 0 评论 -
java并发中的wait(),notify(),notifyAll()方法和Condition接口
java并发中的wait(),notify(),notifyAll()方法和Condition接口原创 2017-10-02 13:10:23 · 435 阅读 · 0 评论 -
java并发中的原子类
什么是原子类 java并法包中提供很多了几种原子类,如AtomicInteger、AtomicLong、AtomicReference等。原子类可以保证操作的不可分割,要么都操作完,要么都不操作。以AtomicInteger为例讲解源码 主要成员变量:private volatile long value;操作的成员变量,包括对其获得与修改 这个成员变量被volatile修饰,说明原子类的实原创 2017-10-30 21:33:22 · 340 阅读 · 0 评论 -
java并发中的ReentrantLock
java并发中的ReentrantLock什么是ReentrantLock: 可重入的互斥锁,基本等同于synchronized的使用原创 2017-10-03 17:58:43 · 303 阅读 · 0 评论 -
Thread.join()的使用
用法 如果一个线程t1在另外一个线程t2上调用join方法,那么t1将被挂起,直到t2结束,t1才会执行任务。一个简单例子public class TestJoin implements Runnable { public static void main(String[] args) throws InterruptedException { Thread t = new原创 2017-10-28 18:53:21 · 271 阅读 · 0 评论 -
java并发中的interrupt
interrupt用来干嘛 终止被阻塞的任务。当抛出异常或该任务调用Thread.interrupted()时,中断状态将被复位。阻塞状态 1)调用sleep()进入睡眠状态 2)调用wait()将线程挂起 3)任务在等待某个输入输出的完成 4)任务试图在某个对象上调用其同步控制方法。但是对象锁不可用。因为另外一个任务已经获得这个锁 3)、4)两种情形将不会被中断简单Demopublic原创 2017-10-28 14:57:40 · 322 阅读 · 0 评论 -
java并发中的ReentrantReadWriteLock
java并发中的ReentrantReadWriteLock- ReadWriteLock: ReadWriteLock是一个接口,在它里面只定义了两个方法: public interface ReadWriteLock { Lock readLock(); Lock writeLock(); }ReentrantReadWriteLock是ReadWrite的唯一的实现原创 2017-10-03 21:38:09 · 263 阅读 · 0 评论 -
java并发中的BlockingQueue
java并发中的BlockingQueue 在生产者-消费者模型中,它会对当前线程产生阻塞,如果一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要我们编写代码去唤醒)。这样提供了极大的方便性。而非阻塞队列则需要我们实现额外的同步策略,调用wait()和notify()方法。原创 2017-10-03 13:17:29 · 227 阅读 · 0 评论 -
java.lang.IllegalMonitorStateException
为什么会报java.lang.IllegalMonitorStateException错误 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。原创 2017-10-02 13:24:01 · 706 阅读 · 0 评论 -
java并发中的CyclicBarrier
java并发中的CyclicBarrierCyclicBarrier介绍:翻译过来就是回旋栅栏。主要适用于这样的场景,你希望创建一组任务,他们并行的执行工作,然后在进行工作下一个步骤之前等待,直至所有任务完成。原创 2017-09-29 20:20:06 · 261 阅读 · 0 评论 -
java并发中的Semaphore
java并发中的Semaphore Semaphore可以控制某个资源可被同时访问的个数(locks和synchronized锁,在任何时刻只允许一个任务访问一个资源),通过acquire()获取一个许可,如果没有则等待,release()释放一个许可。可以将Semaphore看成分发许可证,只有分到许可的线程才能访问线程,访问资源完毕后需要返还许可,以便让等待的线程获取许可访问资源。 Semaphore原创 2017-09-29 10:56:11 · 227 阅读 · 0 评论