java并发编程的艺术
tlk20071
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第一章 并发编程的挑战 总结
1. 如何减少上下文切换?减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。CAS算法。Java的Atomic包使用CAS算法来更新数据,而不需要加锁。使用最少线程。避免创建不需要原创 2017-07-14 17:40:32 · 334 阅读 · 0 评论 -
第10章 Executor框架
1.Executor框架的主要成员:ThreadPoolExecutor、ScheduledThreadPoolExecutor、Future接口、Runnable接口、Callable接口和Executors1.1 ThreadPoolExecutorThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的Thr原创 2017-07-22 13:40:58 · 320 阅读 · 0 评论 -
第9章 Java中的线程池 ThreadPoolExecutor
1 线程池的实现原理线程池的主要处理流程:ThreadPoolExecutor 执行示意图:ThreadPoolExecutor执行execute方法分下面4种情况。1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步骤需要获取全局锁)。2)如果运行的线程等于或多于corePoolS原创 2017-07-22 13:31:14 · 411 阅读 · 0 评论 -
第8章 Java中的并发工具类(CountDownLatch CyclicBarrier Semaphore Exchanger)
1 等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。代码示例如下:12345678910111213141516171819原创 2017-07-22 13:17:51 · 559 阅读 · 0 评论 -
第七章 Java中的13个原子操作类(atomic包)
1 原子更新基本类型类·AtomicBoolean:原子更新布尔类型。 ·AtomicInteger:原子更新整型。 ·AtomicLong:原子更新长整型。它们提供的方法基本一致,以AtomicInteger为例:·int addAndGet(int delta):以原子方式将输入的数值与实例中的值(AtomicInteger里的value)相加,并返回结原创 2017-07-22 13:14:15 · 782 阅读 · 2 评论 -
第六章 Java并发容器和框架(ConcurrentHashMap,ConcurrentLinkedQueue,BlockingQueue,Fork Join)
1.ConcurrentHashMap 1)HashMap多线程put死循环 HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。 123456原创 2017-07-17 16:50:30 · 534 阅读 · 0 评论 -
第五章 Java中的锁
1.队列同步器(AbstractQueuedSynchronizer) 它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作 同步器的设计是基于模板方法模式的,也就是说,使用者需要继承同步器并重写指定的方法,随后将同步器组合在自定义同步组件的实现中,并调用同步器提供的模板方法,而这些模板方法将会调用使用者重写的方法。2.通过AQ原创 2017-07-14 17:46:54 · 296 阅读 · 0 评论 -
第三章 Java内存模型 总结
1. JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。当读一个volatile变量 时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。2. JMM属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证原创 2017-07-14 17:43:22 · 316 阅读 · 0 评论 -
第二章总结
1. 在JavaSE 1.6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态2.CAS实现原子操作的三大问题 ABA问题:加版本号解决, 如:AtomicStampedReference 循环时间长,开销大 只能保证一个共享变量的原子操作:多个共享变量需要加锁,或者合并成一个共享变量操作原创 2017-07-14 17:41:34 · 245 阅读 · 0 评论 -
lock tryLock lockinterruptibly 区别
ReentrantLock 锁有好几种,除了常用的lock ,tryLock ,其中有个lockInterruptibly 。1)lock(), 拿不到lock就不罢休,不然线程就一直block。 比较无赖的做法。2)tryLock(),马上返回,拿到lock就返回true,不然返回false。 比较潇洒的做法。带时间限制的tryLock(),拿不到lock,就等一原创 2017-07-27 18:03:32 · 685 阅读 · 0 评论
分享