![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA高并发
文章平均质量分 94
高并发三大内容:锁、同步容器、线程池
飞机飞机你在哪
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap使用Node+CAS+synchronized实现线程安全
官网对ConcurrentHashMap的使用场景的介绍 //{Hashtable} is synchronized. If a //thread-safe implementation is not needed, it is recommended to use //{HashMap} in place of {@code Hashtable}. If a thread-safe //hi...原创 2020-02-29 19:41:45 · 4119 阅读 · 0 评论 -
LinkedBlockingDeque自动阻塞,put和take方法的阻塞实现
LinkedBlockingDeque自动阻塞的双端队列。 增删元素的方法都是用ReentrantLock上锁的。 add方法无返回值,满了报异常,offer方法满了return false,put方法满了await自动阻塞。 以putFirst(E e)为例: final ReentrantLock lock = new ReentrantLock(); private final Condit...原创 2020-02-29 19:32:00 · 1941 阅读 · 0 评论 -
ReentrantLock代替synchronized手动上锁,trylock尝试上锁,lockInterruptibly设定该锁可以打断,实现公平锁
1.Reentrantlock是手动锁,重入锁,可以来代替synchronized synchronized的使用方法如下: public class T(){ public synchronized void m1(){ // } public synchronized void m2(){ // } public stat...原创 2020-02-29 20:53:17 · 448 阅读 · 0 评论 -
wait、notify和countDownLatch进行线程间交互
1.wait和notify wait会释放锁,notify不会释放锁。wait和notify只能在加锁的情况下使用。 wait底层是引用的native方法,wait一定的时间。 notify唤醒一个对象,底层是一个native方法,只能被该对象的monitor调用。 某个线程调用对象的wait方法,该线程进入等待模式且释放锁。其他线程可以访问。wait可以取消while循环的等待模式,减少CPU的...原创 2020-02-29 20:35:05 · 277 阅读 · 0 评论 -
用Java模拟一个死锁
模拟一个死锁:一个线程1在锁定A的过程中,需要锁定B,另一个线程2在锁定B的过程中需要锁定A,线程1想申请B 的锁已经被线程2锁定了,线程2 想申请A的锁,已经被线程1 锁定了,两个线程都无法执行,构成死锁。 public class T(){ public static String resource1="resource1"; public static String reso...原创 2020-02-29 20:26:19 · 167 阅读 · 0 评论 -
Java高并发——线程基础
1.什么是线程 同一个时间段内,不同的任务模块可以并发进行,称为线程,是CPU的最小调度单位。 进程和线程的区别: 从资源分配的角度: 进程是资源分配的最小单位,一个进程的多个线程共享进程的资源。 从cpu调度的角度: 所有的程序都是以进程的形式运行在操作系统上,接受操作系统的资源分配,其中就包括CPU分配。 进程在执行的时候,会开辟多条线程,来处理不同类型的任务,CPU通过在线程上的调度实现进程...原创 2020-02-29 19:30:00 · 131 阅读 · 0 评论