上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 26 下一页

2018年8月31日

Java并发编程原理与实战四十五:问题定位总结

摘要: 背景 “线下没问题的”、 “代码不可能有问题 是系统原因”、“能在线上远程debug么” 线上问题不同于开发期间的bug,与运行时环境、压力、并发情况、具体的业务相关。对于线上的问题利用线上环境可用的工具,收集必要信息 对定位问题十分重要。 对于导致问题的bug、资源瓶颈很难直观取得数据,需要根据资 阅读全文

posted @ 2018-08-31 19:23 pony1223 阅读(436) 评论(0) 推荐(0)

Java并发编程原理与实战四十四:final域的内存语义

摘要: 一.final域的重排序规则 对于final域,编译器和处理器要遵循两个重拍序规则: 1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2.初次读一个包含final域的对象的应用,与随后初次读这个final域,这两个操作之间不能重排 阅读全文

posted @ 2018-08-31 19:04 pony1223 阅读(317) 评论(0) 推荐(0)

Java并发编程原理与实战四十三:CAS ---- ABA问题

摘要: CAS(Compare And Swap)导致的ABA问题 问题描述 多线程情况下,每个线程使用CAS操作欲将数据A修改成B,当然我们只希望只有一个线程能够正确的修改数据,并且只修改一次。当并发的时候,其中一个线程已经将A成功的改成了B,但是在线程并发调度过程中尚未被调度,在这个期间,另外一个线程( 阅读全文

posted @ 2018-08-31 18:59 pony1223 阅读(316) 评论(0) 推荐(0)

Java并发编程原理与实战四十二:锁与volatile的内存语义

摘要: 锁与volatile的内存语义 1.锁的内存语义 2.volatile内存语义 3.synchronized内存语义 4.Lock与synchronized的区别 5.ReentrantLock源码实例分析 1.锁的内存语义 锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让 阅读全文

posted @ 2018-08-31 18:52 pony1223 阅读(357) 评论(0) 推荐(0)

Java并发编程原理与实战四十一:重排序 和 happens-before

摘要: 一、概念理解 首先我们先来了解一下什么是重排序:重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序,如下图所示 上述的1属于编译器重排序,2和3属于处理器重排序。这些重排序可能会导致多线程程序出现内存可见性 阅读全文

posted @ 2018-08-31 18:43 pony1223 阅读(485) 评论(0) 推荐(0)

2018年8月29日

Java并发编程原理与实战四十:JDK8新增LongAdder详解

摘要: 传统的原子锁AtomicLong/AtomicInt虽然也可以处理大量并发情况下的计数器,但是由于使用了自旋等待,当存在大量竞争时,会存在大量自旋等待,而导致CPU浪费,而有效计算很少,降低了计算效率。 而LongAdder是根据ConcurrentHashMap这类为并发设计的类的基本原理——锁分 阅读全文

posted @ 2018-08-29 08:18 pony1223 阅读(933) 评论(0) 推荐(0)

Java并发编程原理与实战三十九:JDK8新增锁StampedLock详解

摘要: 1、StampedLock是做什么的? 》它是ReentrantReadWriteLock 的增强版,是为了解决ReentrantReadWriteLock的一些不足。 2、ReentrantReadWriteLock有什么不足之处呢? 》我们都知道,ReentrantReadWriteLock是读 阅读全文

posted @ 2018-08-29 08:12 pony1223 阅读(894) 评论(0) 推荐(0)

2018年8月24日

Java并发编程原理与实战三十八:多线程调度器(ScheduledThreadPoolExecutor)

摘要: 在前面介绍了java的多线程的基本原理信息:线程池的原理与使用 本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分。 我们如果要用java默认的线程池来做调度器,一种选择就是Timer和TimerTask的结合:一个Timer为一个 阅读全文

posted @ 2018-08-24 08:15 pony1223 阅读(849) 评论(0) 推荐(0)

Java并发编程原理与实战三十七:线程池的原理与使用

摘要: 一、简介 线程池在我们的高并发环境下,实际应用是非常多的!!适用频率非常高! 有过使用过Executors框架的朋友,可能不太知道底层的实现,这里就是讲Executors是由ThreadPoolExecutor实现的。好的,让我们来看看ThreadPollExcutor是怎样实现的呢? 如果你想了解 阅读全文

posted @ 2018-08-24 08:14 pony1223 阅读(600) 评论(0) 推荐(0)

2018年8月23日

Java并发编程原理与实战三十六:阻塞队列&消息队列

摘要: 一、阻塞队列 1、阻塞队列BlockingQueue 》可以理解成生产者消费者的模式 》消费者要等待到生产者生产出来产品。 》而非阻塞队列ConcurrentLinkedQueue是非阻塞的,所以它取出来的时候可能为空。 2、注意使用BlockingQueue接口的时候。 add方法和remove方 阅读全文

posted @ 2018-08-23 08:14 pony1223 阅读(5944) 评论(0) 推荐(0)

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 26 下一页

导航