随笔分类 - 并发
并发线程的一些学习总结
摘要:前言 在java中,如果每个请求到达就创建一个新线程,那么创建和销毁线程所花费的时间是非常巨大的,如果创建过多的线程,会使内存使用过多或者线程切换过于频繁导致系统资源不足。如果使用线程池,事先创建好一定的线程,用一个容器维护,每次任务进来就从池里面获取一个线程,任务执行完就把线程还给线程池。 (1)
阅读全文
摘要:阻塞队列介绍 1,ArrayBlockingQueue:数组实现的有界阻塞队列, 此队列按照先进先出(FIFO)的原则 对元素进行排序。 2,LinkedBlockingQueue:链表实现的有界阻塞队列, 此队列的默认和最大长度为 Integer.MAX_VALUE。此队列按照先进先出的原则对元
阅读全文
摘要:1,使用及场景 CHM是J.U.C提供的一个线程安全且高效的HashMap,api基本和Hashmap类似,主要有get,put等方法。 2,源码分析 2.1 JDK1.7和1.8的变化 JDK1.7,简单来说chm是一个segment数组,它通过集成ReentrantLock进行加锁,通过每次锁
阅读全文
摘要:CountDownLatch 应用:适用于执行某个任务之前必须等到它的前置任务都执行完才可以开始。例如并发测试100个线程同时执行,网站各个模块多线程同时加载数据,当全部加载完成再返回给前端。 分析:内部使用的是共享锁机制 new CountDownLatch(1) 首先初始化一个数字为1的计数
阅读全文
摘要:Condition是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件,只有满足条件时,线程才会被唤醒。 结论: 阻塞 :await()方法中,在线程释放锁资源之后,如果节点不在 AQS 等待队列,则阻塞当前线程,如果在AQS等待队列,则自旋等待尝试获取锁。 释放 :signal()
阅读全文
摘要:本文转载自:https://blog.csdn.net/u013332124/article/details/84647915 文章目录 Thread.sleep() 方法 Object.wait() 方法 LockSupport.park() 方法 实现原理 和wait的不同 对中断的处理 总结
阅读全文
摘要:JUC:Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。 lock 定义了释放锁和获得锁的抽象方法,在JDK1.5出现,可以解决synchronized在某些场景下的短板,Loc
阅读全文
摘要:初识Volatile 上面的代码,如果stop变量没有被volatile修饰的话,线程是不会被终止的,只有加上volatile,线程才会退出。 分析: 多线程环境下,读线程不能及时的获取到其他线程写入的最新的值,这就是所谓的可见性问题。 硬件层面分析可见性问题 众所周知,CPU、内存和IO设备之
阅读全文
摘要:Synchronized 1 加锁方式 修饰实例方法 锁的是当前实例 修饰静态方法 锁的是当前类 例如Demo.class 修饰代码块 看具体锁对象分析 2 锁的存储 以32位虚拟机为例 为什么任何对象都可以实现锁? 每个Object在jvm都有一个native的C++对象进行对应,线程在获取锁的时
阅读全文

浙公网安备 33010602011771号