高并发
文章平均质量分 90
xk_一步一步来
一步一步
展开
-
跳表(SkipList)及ConcurrentSkipListMap源码解析
https://blog.csdn.net/sunxianghuang/article/details/52221913二分查找和AVL树查找二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存。这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了。如果需要的是一个能够进行二分查找,又能快速添加和删除元素的数据结构,首先就是二叉查找树,二叉查找...转载 2019-06-15 14:54:54 · 204 阅读 · 0 评论 -
无锁CAS与Unsafe类及其并发包Atomic
转自:https://blog.csdn.net/javazejian/article/details/72772470在前面一篇博文中,我们曾经详谈过有锁并发的典型代表synchronized关键字,通过该关键字可以控制并发执行过程中有且只有一个线程可以访问共享资源,其原理是通过当前线程持有当前对象锁,从而拥有访问权限,而其他没有持有当前对象锁的线程无法拥有访问权限,也就保证了线程安全。但在本...转载 2019-03-10 11:21:52 · 154 阅读 · 0 评论 -
多个线程之间共享数据的方式探讨
转自:https://blog.csdn.net/axi295309066/article/details/52914644内容摘要多个线程之间共享数据,按照每个线程执行代码是否相同,我们可以采取不同的处理方式,这里通过简单的卖票示例说明了当每个线程执行相同代码的情况,对于多个线程执行不同代码的情况,处理方式比较灵活,这里主要介绍了2种方式,通过2种方式的对比和归纳,我们可以总结出在多个线程执...转载 2019-03-09 15:10:43 · 754 阅读 · 0 评论 -
线程范围内共享数据
转自:https://blog.csdn.net/eson_15/article/details/51531941 假设现在有个公共的变量data,有不同的线程都可以去操作它,如果在不同的线程对data操作完成后再去取这个data,那么肯定会出现线程间的数据混乱问题,因为A线程在取data数据前可能B线程又对其进行了修改,下面写个程序来说明一下该问题:public class ThreadS...转载 2019-03-09 14:53:06 · 157 阅读 · 0 评论 -
传统线程同步通信技术
转自:https://blog.csdn.net/eson_15/article/details/51530778先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要...转载 2019-03-09 14:52:08 · 160 阅读 · 0 评论 -
线程同步工具Exchanger的使用
转自:https://blog.csdn.net/eson_15/article/details/51581842 如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返...转载 2019-03-09 14:36:34 · 135 阅读 · 0 评论 -
synchronized与static synchronized 的区别
转自:https://www.cnblogs.com/shipengzhi/articles/2223100.html 1.synchronized与static synchronized 的区别 synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是...转载 2019-03-09 13:47:18 · 234 阅读 · 0 评论 -
【综合帖】Java并发多线程编程学习专栏
转自:https://blog.csdn.net/u010648555/article/details/78341321本帖主要用于记录Java多线程或并发编程的一些学习书籍和一些优秀的博文,方便自己学习并发多线程编程的知识!也为了通过自己的学习整理出学习笔记,输出一个java并发编程的专栏。让自己的学习的知识沉淀下来!本专栏暂停更新……本篇记录的博文或者些图片内容都来自互联网,如果有任何侵...转载 2019-03-09 13:13:30 · 192 阅读 · 0 评论 -
一张图讲解对象锁和关键字synchronized修饰方法(代码块)
转自:https://blog.csdn.net/u010648555/article/details/78138225每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁,这个方法就可以进行同步,在多线程的时候,不会出现线程安全问题。注:Monitor是 Java中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或...转载 2019-03-09 13:12:23 · 466 阅读 · 0 评论 -
synchronized 是可重入锁吗?为什么?
转自:https://www.cnblogs.com/incognitor/p/9894604.html什么是可重入锁?关于什么是可重入锁,我们先来看一段维基百科的定义。若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,执行线程可以再次进入并执行...转载 2019-03-09 11:32:31 · 1032 阅读 · 1 评论 -
Java不可重入锁和可重入锁理解
转自:https://blog.csdn.net/u012545728/article/details/80843595最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(...转载 2019-03-09 11:28:49 · 307 阅读 · 0 评论 -
深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理
转自:https://blog.csdn.net/javazejian/article/details/75043422在阅读本篇博文前,建议有CAS知识储备,因为关于CAS的操作在ReetrantLock的实现原理中可是随处可见,如没有了解过CAS可以先看博主的另一篇博文【Java并发编程-无锁CAS与Unsafe类及其并发包Atomic】Lock接口前面我们详谈过解决多线程同步问题的关键...转载 2019-03-10 11:24:47 · 137 阅读 · 0 评论 -
深入理解AQS Java多线程中锁的理解与使用
https://blog.csdn.net/iter_zc/column/info/loveconcurrency/2https://chenssy.blog.csdn.net/column/info/java-concurrent-prog原创 2019-03-10 11:28:53 · 732 阅读 · 1 评论 -
Java 并发工具箱之concurrent包
https://blog.csdn.net/wbwjx/article/details/57856045概述java.util.concurrent 包是专为 Java并发编程而设计的包。包下的所有类可以分为如下几大类:locks部分:显式锁(互斥锁和速写锁)相关;atomic部分:原子变量类相关,是构建非阻塞算法的基础;executor部分:线程池相关;collections部分...转载 2019-04-24 19:32:06 · 256 阅读 · 0 评论 -
volatile 可以保证可见性,但不能保证原子性
用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新值。任何CPU上的线程都能读取到此刻这些数据的最新版本。(注意是此刻,不是所有时刻!!!)volatile很容易被误用,用来进行原子性操作。实际是不对的。被volatile修饰的变量可以保证该变量的可见性,但并不能保证操作的原子性。当需要使用被volatile修饰的变量时,线程会从主内存中重新获取该变...原创 2019-03-16 13:07:06 · 1065 阅读 · 0 评论 -
Java并发编程-并发编程知识点总结
什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。J2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存...转载 2019-03-11 11:13:19 · 294 阅读 · 0 评论 -
Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比
转自:https://blog.csdn.net/qq_34337272/article/details/83409990synchronized关键字最主要的三种使用方式的总结修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 。也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任...转载 2019-03-11 00:06:18 · 528 阅读 · 0 评论 -
全面理解Java内存模型(JMM)及volatile关键字
转自:https://blog.csdn.net/javazejian/article/details/72772461本篇主要结合博主个人对Java内存模型的理解以及相关书籍内容的分析作为前提,对JMM进行较为全面的分析,本篇的写作思路是先阐明Java内存区域划分、硬件内存架构、Java多线程的实现原理与Java内存模型的具体关系,在弄明白它们间的关系后,进一步分析Java内存模型作用以及一些...转载 2019-03-10 23:57:40 · 254 阅读 · 0 评论 -
剖析基于并发AQS的共享锁的实现(基于信号量Semaphore)
转自:https://blog.csdn.net/javazejian/article/details/76167357上篇文章通过ReetrantLock分析了独占锁模式的实现原理,即基于AQS同步框架,本篇打算从Semaphore入手分析共享锁模式的实现原理,与独占锁模式不同的是,共享锁模式允许同一个时刻多个线程可获取同步状态。本篇的思路是先说明Semaphore的基本用法,再通过Semap...转载 2019-03-10 23:55:40 · 176 阅读 · 0 评论 -
深入理解Java并发之synchronized实现原理
转自:https://blog.csdn.net/javazejian/article/details/72828483本篇主要是对Java并发中synchronized关键字进行较为深入的探索,这些知识点结合博主对synchronized的个人理解以及相关的书籍的讲解(在结尾参考资料),如有误处,欢迎留言。线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一...转载 2019-03-10 23:52:18 · 259 阅读 · 0 评论 -
再说Runnable、Callable、Future、线程池
转自:https://blog.csdn.net/sinat_39634657/article/details/81456810 Runnable其中Runnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现多...转载 2019-03-10 16:50:43 · 204 阅读 · 0 评论 -
BATJ都爱问的(多)线程面试题
转自:https://blog.csdn.net/qq_34337272/article/details/83655409下面最近发的一些并发编程的文章汇总,通过阅读这些文章大家再看大厂面试中的并发编程问题就没有那么头疼了。今天给大家总结一下,面试中出镜率很高的几个多线程面试题,希望对大家学习和面试都能有所帮助。备注:文中的代码自己实现一遍的话效果会更佳哦!并发编程面试必备:synchron...转载 2019-03-10 13:39:58 · 851 阅读 · 0 评论 -
JAVA 并发编程-应用篇
https://blog.csdn.net/hejingyuan6/article/details/50332889https://blog.csdn.net/eson_15/article/details/51593139原创 2019-03-10 11:33:05 · 149 阅读 · 0 评论 -
深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
转自:https://blog.csdn.net/javazejian/article/details/77410889本篇主要是对Java并发中阻塞队列的LinkedBlockingQueue与ArrayBlockingQueue进行深入分析。阻塞队列概要阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列支出阻塞添加和阻塞删除方法。...转载 2019-03-10 11:31:44 · 253 阅读 · 0 评论 -
java并发编程
https://blog.csdn.net/javazejian/article/category/6940462https://chenssy.blog.csdn.net/column/info/java-concurrent-prog转载 2019-03-08 19:54:28 · 102 阅读 · 0 评论 -
Java并发容器:ConcurrentLinkedQueue
转自:https://blog.csdn.net/chenssy/article/details/74853120 http://cmsblogs.com/要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。ConcurrentLinkedQueue是一个...转载 2018-11-16 20:00:55 · 189 阅读 · 0 评论 -
Java线程的6种状态及切换(透彻讲解)
转自;https://blog.csdn.net/pange1991/article/details/53860651中线程的状态分为6种。1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象...转载 2018-11-12 16:14:42 · 125 阅读 · 0 评论 -
有关并行的两个重要定律
使用并行程序处于两个目的。第一,为了获得更好的性能;第二,由于业务模型的需要,确实需要多个执行实体。一、Amdahl定律Amdahl定律是计算机科学中非常重要的定律。它定义了串行系统并行化后的加速比的计算公式和理论上限。加速比定义:加速比=优化前系统耗时/优化后系统耗时即,所谓加速比,就是优化前的耗时与...转载 2018-11-12 13:13:51 · 267 阅读 · 0 评论 -
并发级别:阻塞、无障碍、无锁、无等待
一般认为并发可以分为阻塞与非阻塞,对于非阻塞可以进一步细分为无障碍、无锁、无等待,下面就对这几个并发级别,作一些简单的介绍。并发级别1、阻塞阻塞是指一个线程进入临界区后,其它线程就必须在临界区外等待,待进去的线程执行完任务离开临界区后,其它线程才能再进去。2、无障碍(obstruction-free)无障碍是一种最弱的非阻塞调度。两个线程如果是无障碍的执行,那么他们不会因为临界区的问题...原创 2018-11-12 11:39:50 · 1404 阅读 · 0 评论 -
AtomicIntegerFieldUpdater字段原子更新类
转自: https://blog.csdn.net/anLA_/article/details/78662383 AtomicInteger和AtomicIntegerArray,这两个都是在最初设计编码时候就已经考虑到了需要保证原子性。但是往往有很多情况就是,由于需求的更改,原子性需要在后面加入,类似于我不要求你这整个类操作具有原子性,我只要求你里面一个字段操作具有原子性。没错,con...转载 2018-11-14 10:44:52 · 169 阅读 · 0 评论 -
死锁、活锁、饥饿
什么是死锁死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁发生的条件互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到资源被释放。请求和保持条件:线程T1至少已经保持了一个资源R1...转载 2018-11-12 11:29:46 · 178 阅读 · 0 评论 -
并发编程之Fork/Join框架
转自:https://blog.csdn.net/lishehe/article/details/46563785  什么是Fork/Join框架        Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后转载 2018-11-15 17:14:17 · 148 阅读 · 0 评论 -
submit和execute区别
先上测试用例[java] view plain copypackage com.phl.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executo...翻译 2018-11-15 16:40:16 · 997 阅读 · 0 评论 -
Executor, ExecutorService 和 Executors 间的不同
Executor, ExecutorService 和 Executors 间的不同UML简要类图关系:下面详细看一下三者的区别:Executor vs ExecutorService vs Executors正如上面所说,这三者均是 Executor 框架中的一部分。Java 开发者很有必要学习和理解他们,以便更高效的使用 Java 提供的不同类型的线程池。总结一下这三者间的区别,以...翻译 2018-11-15 16:18:50 · 250 阅读 · 0 评论 -
CAS无锁类的使用
转自:https://blog.csdn.net/netcobol/article/details/79785443 1. AtomicIntegerAPIpublic final int get() //取得当前值public final void set(int newValue) //设置当前值public final int getAndSet(int newValue...转载 2018-11-13 22:01:12 · 196 阅读 · 0 评论 -
面试必问的CAS,你懂了吗?
转自:https://blog.csdn.net/v123411739/article/details/79561458概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。上面这个例子在volatile关键...转载 2018-11-13 21:32:03 · 186 阅读 · 0 评论 -
java高并发:CAS无锁原理及广泛应用
转自: https://blog.csdn.net/fgyibupi/article/details/53761730 前言在现在的互联网技术领域,用户流量越来越大,系统中并发量越来越大,大公司的日活动辄成百上千万。如何面对如此高的并发是当今互联网技术圈一直在努力的事情。 应对高并发需要在各个技术层面进行合理的设计和技术选型才可以。本文只讲述微观层面是如何应对多线程高并发的,介绍著名的...转载 2018-11-13 00:42:08 · 673 阅读 · 0 评论 -
重入锁:ReentrantLock 详解
转自:https://blog.csdn.net/Somhu/article/details/78874634在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,JDK6.0版本之后synchronized 得到了大量的优化,二者性能也不分伯仲,但是重入锁是可以完全替代synchronized关键字的。除此之外,重入锁又自带一系列高逼格UBFF:可中断响应、锁申请等待限时...转载 2018-11-14 11:48:58 · 169 阅读 · 0 评论 -
JDK自带线程池详解
转自:https://blog.csdn.net/liuchuanhong1/article/details/52042182 一、前言在最近做的一个项目中,需要大量的使用到多线程和线程池,下面就java自带的线程池和大家一起分享。二、简介多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著...转载 2018-11-14 19:31:00 · 294 阅读 · 0 评论 -
线程同步工具LockSupport的使用
转自:https://blog.csdn.net/u013851082/article/details/70242395      LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语。java锁和同步器框架的核心 AQS:&...转载 2018-11-14 18:29:11 · 150 阅读 · 0 评论