
java之并发编程
weixin_40161962
111
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java并发之集合不安全
集合不安全 ArrayList不安全 ArrayList的方法没加synchronized关键字,多线程下是不安全的 java.util.concurrentModificationError 解决方案 1 new Vector(); 2 Collections.synchronizedList(new ArrayList<>()); 3 new CopyOnWriteArrayLis...原创 2019-11-12 15:34:04 · 154 阅读 · 0 评论 -
java并发之工具类
CountDownLantch 允许一个或多个线程等待其他线程完成操作 # 读写锁 独占锁 读写分离:写一次一个,读可以一起读 写操作:必须是原子操作,不能被打断 ```java class Mycache{ ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); private volati...原创 2019-11-12 15:33:28 · 137 阅读 · 0 评论 -
java并发之死锁
死锁编码以及定位分析 产生死锁的原因 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 代码 public class DeadLockDemo { public static void main(String...原创 2019-11-04 17:01:22 · 172 阅读 · 0 评论 -
java并发之线程池
线程池使用过吗?谈谈对 ThreadPoolExector 的理解? 为什使用线程池,线程池的优势? 线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 主要特点...原创 2019-11-04 17:00:17 · 122 阅读 · 0 评论 -
java多线程创建之实现callable接口
callable使用场景:一千个线程,第996个出错,需要返回错误原因。 thread接口不能传callable,为什么? 找到一个即实现callable,又和runnable相关的类,传这个类。Futuretask类。 class Mythread2 implements Callable<Integer>{ @Override public Integer call() th...原创 2019-11-04 01:01:01 · 136 阅读 · 0 评论 -
java并发之手写生产者消费者模型
1 lock await signal方式 class ShareData{ private volatile int number = 0; private int MAX_VALUE = 3; private int MIN_VALUE = 0; Lock lock = new ReentrantLock(); Condition condition = lock.newCondit...原创 2019-11-03 14:58:37 · 285 阅读 · 0 评论 -
java并发之synchronized和lock的比较
1 原始结构 synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,其实 wait/notify 等方法也是依赖 monitor 对象只有在同步快或方法中才能调用 wait/notify 等方法。 Lock 是具体类(java.util.concurrent.locks.Lock)是 ...原创 2019-10-31 22:02:57 · 101 阅读 · 0 评论 -
java并发之阻塞队列
阻塞队列 消息中间件底层原理。 队列是空时,获取元素操作被阻塞。 队列满时,插入元素操作被阻塞。 因此,程序员不需要关心何时阻塞或者唤醒线程。 阻塞队列共有七种,其中常用的是 ArrayBlockingQueue 数组组成的有界阻塞队列 LinkedBlockingQueue 链表组成的有界阻塞队列(Integer.MAX_VALUE) SynchronousQueue 单个元素的阻塞队列(生产...原创 2019-10-31 22:00:38 · 128 阅读 · 0 评论 -
java并发之工具类
countdownlanch 秦灭六国,阻塞 public class CountDownLatchDemo { public static void main(String[] args) { CountDownLatch countDownLatch = new CountDownLatch(6); for(int i = 1; i <= 6; i++) { new Th...原创 2019-10-30 22:34:12 · 86 阅读 · 0 评论 -
volatile关键字学习
volatile## 标题 volatile 是 Java 虚拟机提供的轻量级的同步机制,具有三大特性 保证可见性 禁止指令排序 不保证原子性(synchronized可以保证原子性,但效率低) #1 JMM(Java 内存模型) 基本概念 JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。 要求 可见性 原子性 有序性 线程解锁前,必须把...原创 2019-10-19 16:32:38 · 100 阅读 · 0 评论 -
CAS之ABA问题
cas之ABA问题 AtomicInteger cas–>unsafe–>cas底层思想–>ABA–>原子引用更新–>如何规避ABA问题。 CAS最大问题;ABA问题。 CAS算法提取出内存中某个时刻的数据,并在当下时刻比较并替换,这个时间差可能会产生数据的变化。 public class ABAdemo { static AtomicReference<In...原创 2019-10-20 11:02:57 · 134 阅读 · 0 评论 -
CAS学习
CAS是什么? CAS是compare and swap。其代码主要位于juc的atomic包下,是用于实现是用于实现多线程同步的原子指令。 synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。 CAS是c语言实现的cpu锁,机制相当于一个乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。 原理 juc的atomic...原创 2019-10-19 20:08:36 · 202 阅读 · 1 评论