08 2018 档案

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

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

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

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

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

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

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

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

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

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

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

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

Java并发编程原理与实战三十九:JDK8新增锁StampedLock详解
摘要:1、StampedLock是做什么的? 》它是ReentrantReadWriteLock 的增强版,是为了解决ReentrantReadWriteLock的一些不足。 2、ReentrantReadWriteLock有什么不足之处呢? 》我们都知道,ReentrantReadWriteLock是读 阅读全文

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

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

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

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

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

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

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

Java并发编程原理与实战三十五:并发容器ConcurrentLinkedQueue原理与使用
摘要:一、简介 offer和poll offer(E e) 将指定元素插入此队列的尾部。 poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 offer是往队列添加元素,poll是从队列取出元素并且删除该元素 执行结果 ConcurrentLinkedQueue中的add() 和 of 阅读全文

posted @ 2018-08-21 08:16 pony1223 阅读(6521) 评论(1) 推荐(1) 编辑

Java并发编程原理与实战三十四:并发容器CopyOnWriteArrayList原理与使用
摘要:1、ArrayList的实现原理是怎样的呢? 》例如:ArrayList本质是实现了一个可变长度的数组。 假如这个数组的长度为10,调用add方法的时候,下标会移动到下一位,当移动到70%左右的时候。会创建一个新数组,而这个新数组的长度变成2倍或3倍等等。将原来的数据复制到新数组中,新的内容会接着添 阅读全文

posted @ 2018-08-20 08:30 pony1223 阅读(470) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战三十三:同步容器与并发容器
摘要:1、什么叫容器? 》数组,对象,集合等等都是容器。 2、什么叫同步容器? 》Vector,ArrayList,HashMap等等。 3、在多线程环境下,为什么不用同步容器呢? 》1、线程不安全问题。2、线程安全的情况下,但是性能非常差问题。 Vector(线程安全,基本不用) 》ArrayList( 阅读全文

posted @ 2018-08-19 21:39 pony1223 阅读(217) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战三十二:ForkJoin框架详解
摘要:1、Fork/Join框架有什么用呢? 》Fork使用来切分任务,Join是用来汇总结果。举个简单的栗子:任务是1+2+3+...+100这个任务(当然这个任务的结果有好的算法去做,现在是用笨方法去计算这个结果)。 》适合在多核环境下,单核环境使用ForkJoin没什么意思。简单来说就是,一个任务切 阅读全文

posted @ 2018-08-19 21:37 pony1223 阅读(485) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战三十一:Future&FutureTask 浅析
摘要:一、Futrue模式有什么用? >正所谓技术来源与生活,这里举个栗子。在家里,我们都有煮菜的经验。(如果没有的话,你们还怎样来泡女朋友呢?你懂得)。现在女票要你煮四菜一汤,这汤是鸡汤,有常识的人鸡汤要煲好久滴。如果你先炒四个菜,最后再煲汤,估计都已经一天的时间了。好了。如果我们先煲汤,在煲汤的时候, 阅读全文

posted @ 2018-08-19 21:33 pony1223 阅读(954) 评论(2) 推荐(2) 编辑

Java并发编程原理与实战三十:CountDownLatch与CyclicBarrier 区别
摘要:相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到底有啥作用,怎么用,应用那些场景?为什么面试总会遇到?本文结合场景为大家加深理解。 理解: Coun 阅读全文

posted @ 2018-08-16 08:28 pony1223 阅读(237) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十九:Exchanger
摘要:一、简介 前面三篇博客分别介绍了CyclicBarrier、CountDownLatch、Semaphore,现在介绍并发工具类中的最后一个Exchange。Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的。在 阅读全文

posted @ 2018-08-16 08:22 pony1223 阅读(750) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战二十八:信号量Semaphore
摘要:1.Semaphore简介 Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。 所谓Semaphore即 信号量 的意思。 这个叫法并不能很好地表示它的作用,更形象的说法应该是许可证管理器。 其作用在JDK注释中是这样描述的: A counti 阅读全文

posted @ 2018-08-15 08:30 pony1223 阅读(6237) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十七:循环栅栏:CyclicBarrier
摘要:昨天我们学习了倒计数功能的等待,今天我们学习的是循环栅栏:CyclicBarrier。下面我们就开始吧: 1.CyclicBarrier简介CyclicBarrier,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。所谓Cyclic即 循环 的意思,所谓Barr 阅读全文

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

Java并发编程原理与实战二十六:闭锁 CountDownLatch
摘要:关于闭锁 CountDownLatch 之前在网上看到过一篇举例非常形象的例子,但不记得是出自哪里了,所以这里就当自己再重新写一篇吧: 例子如下: 我们每天起早贪黑的上班,父母每天也要上班,有一天定了一个饭店,一家人一起吃个饭,通知大家下班去饭店集合。 假设:3个人在不同的地方上班,必须等到3个人到 阅读全文

posted @ 2018-08-14 08:19 pony1223 阅读(563) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理
摘要:1.什么是ThreadLocal ThreadLocal顾名思义是线程局部变量。这种变量和普通的变量不同,这种变量在每个线程中通过get和set方法访问, 每个线程有自己独立的变量副本。线程局部变量不存在多个线程同时对同一个变量的操作,所以不会有线程安全问题。 2.ThreadLocal变量的使用 阅读全文

posted @ 2018-08-14 08:07 pony1223 阅读(839) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十四:简易数据库连接池
摘要:参考资料: 《java并发编程实战》龙果学院 阅读全文

posted @ 2018-08-11 20:49 pony1223 阅读(260) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十三:Condition原理分析
摘要:先来回顾一下java中的等待/通知机制 我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。 自旋实现的等待通知 最简单的实现方法就是将conditi 阅读全文

posted @ 2018-08-11 20:47 pony1223 阅读(2324) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十二:Condition的使用
摘要:Condition的使用 Condition用于实现条件锁,可以唤醒指定的阻塞线程。下面来实现一个多线程顺序打印a,b,c的例子。 先来看用wait和notify的实现: public class Demo { private volatile int singal; public synchron 阅读全文

posted @ 2018-08-11 20:41 pony1223 阅读(364) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十一:线程通信wait&notify&join
摘要:wait和notify wait和notify可以实现线程之间的通信,当一个线程执行不满足条件时可以调用wait方法将线程置为等待状态,当另一个线程执行到等待线程可以执行的条件时,调用notify可以唤醒等待的线程。需要强调的是,在调用wait和notify时需要先获取锁,否则会抛出IllegalM 阅读全文

posted @ 2018-08-11 20:38 pony1223 阅读(297) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战二十:线程安全性问题简单总结
摘要:一、出现线程安全性问题的条件 •在多线程的环境下 •必须有共享资源 •对共享资源进行非原子性操作 二、解决线程安全性问题的途径 •synchronized (偏向锁,轻量级锁,重量级锁) •volatile •JDK提供的原子类 •使用Lock(共享锁,排它锁) 三、认识的“*锁” •偏向锁 Jav 阅读全文

posted @ 2018-08-11 20:34 pony1223 阅读(326) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十九:AQS 剖析
摘要:一、引言在JDK1.5之前,一般是靠synchronized关键字来实现线程对共享变量的互斥访问。synchronized是在字节码上加指令,依赖于底层操作系统的Mutex Lock实现。而从JDK1.5以后java界的一位大神—— Doug Lea 开发了AbstractQueuedSynchro 阅读全文

posted @ 2018-08-11 20:21 pony1223 阅读(854) 评论(0) 推荐(2) 编辑

Java并发编程原理与实战十八:读写锁
摘要:ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 基本规则: 读读不互斥 读写互斥 写写互斥问题: 既然读读不互斥,为何还要加读锁答: 如果只是读,是不需要加锁的,加锁本身 阅读全文

posted @ 2018-08-06 08:25 pony1223 阅读(1815) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十七:AQS实现重入锁
摘要:一、什么是重入锁 可重入锁就是当前持有锁的线程能够多次获取该锁,无需等待 二、什么是AQS AQS是JDK1.5提供的一个基于FIFO等待队列实现的一个用于实现同步器的基础框架,这个基础框架的重要性可以这么说,JCU包里面几乎所有的有关锁、多线程并发以及线程同步器等重要组件的实现都是基于AQS这个框 阅读全文

posted @ 2018-08-05 17:50 pony1223 阅读(738) 评论(0) 推荐(1) 编辑

Java并发编程原理与实战十六:AQS
摘要:一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo 阅读全文

posted @ 2018-08-05 17:50 pony1223 阅读(274) 评论(2) 推荐(0) 编辑

Java并发编程原理与实战十五:手动实现一个可重入锁
摘要:package com.roocon.thread.ta1; 运行结果: 现在来模拟下,基于以上代码,锁是否可重入: 分析以上运行结果: 线程1调用a方法,第一次进入lock方法,去获取锁。此时,isLocked为false,于是将标志锁改为true。然后,输出a。再去执行b方法。此时,再次去调用l 阅读全文

posted @ 2018-08-02 08:04 pony1223 阅读(290) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十四:Lock接口的认识和使用
摘要:保证线程安全演进: synchronized volatile AtomicInteger Lock接口提供的方法: void lock():加锁 void unlock():解锁 void lockInterruptibly():在多个线程并发获取锁的时候,那么,当有些线程拿不到锁时会等待,会不停 阅读全文

posted @ 2018-08-02 08:00 pony1223 阅读(275) 评论(0) 推荐(0) 编辑

Java并发编程原理与实战十三:JDK提供的原子类原理与使用
摘要:原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型: 运行结果: 运行结果: 对CAS的源码理解:--初步理解 在AtomicInteger中有这样一段源码: 其中,compareAndSwap就是CAS的缩写。如果prev和next不相等,则返回true。否则,返回f 阅读全文

posted @ 2018-08-02 07:57 pony1223 阅读(241) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示