
多线程
迎风追日
9 年软件开发经验,其中 3 年的项目开发负责人经验,擅长 java web 平台的开发,多年云计算、大数据领域面向教育、公安类 SaaS 应用开发背景;具有较强的业务分析能力,能够快速理解和分析复杂的业务逻辑;有较强的沟通协作能力,有异地开发经历;有较强的学习能力,且愿意尝试新技术。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java | 如何设置线程池大小?
还记得我说过“线程池的线程数量设置过多会导致线程竞争激烈”吗?今天再补一句,如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源。那么如何设置才不会影响系统性能呢...转载 2019-10-28 22:41:41 · 2663 阅读 · 2 评论 -
ThreadLocalRandom的正确用法
java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据。安全随机生成器需要生成加密性强的随机数据的时候才用它 生成速度慢 如果需要生成大量的随机数据,可能会产生阻塞需要等待外部中断事件而伪随机生成器,只依赖于“seed”的初始值,如果给生成算法提供相同的seed,可以得到一样的伪随机序列。一般情况下,由于它是计算密集型的(不依赖于任何IO设备),因此生成速度更快。以下是伪随机生成器原创 2020-06-27 13:21:38 · 18433 阅读 · 3 评论 -
原子类为何能支持高并发(CAS介绍)
无锁方案相对互斥锁方案,最大的好处就是性能。互斥锁方案为了保证互斥性,需要执行加锁、解锁操作,而加锁、解锁操作本身就消耗性能;同时拿不到锁的线程还会进入阻塞状态,进而触发线程切换,线程切换对性能的消耗也很大。 相比之下,无锁方案则完全没有加锁、解锁的性能消耗,同时还能保证互斥性,既解决了问题,又没有带来新的问题,可谓绝佳方案。其实原子类性能高的秘密很简单,硬件支持而已。CPU 为了解决并发问题...原创 2020-02-16 22:54:03 · 359 阅读 · 0 评论 -
如何避免死锁
避免死锁主要有 3种方式加锁顺序加锁时限死锁检测加锁顺序一个线程如果要获取多个锁,必须按照一定的顺序去获取,比如要获取A B C 三把锁,我们规定,必须获取到了 AB 两把锁,才能去获取 C锁举个例子 现在有两个线程 都要去获取 ABC 三把锁然后 1号 线程 获取到了 A 和 B 两把锁2号 线程获取了 C锁于是 1号线程在等待 2号线程释放锁C锁2号线程在等待...原创 2019-12-26 11:27:01 · 442 阅读 · 1 评论 -
Synchronized锁升级步骤
Synchronized锁升级步骤1. 偏向锁:JDK6中引入的一项锁优化,它的目的是消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能 ,2. 偏向锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要同步。大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁3. 当锁对...转载 2019-10-21 08:55:27 · 1142 阅读 · 0 评论 -
秒杀系统设计要点
1、概述秒杀其实主要解决的是两个问题,一个是并发读,一个是并发写。秒杀系统本质上是一个满足大并发、高性能和高可用的分布式系统。在整个用户请求路径上从浏览器到服务端我们要遵循几个原则:用户请求的数据尽量少,从而减少cpu消耗 请求数尽量少:合并CSS和JavaScript文件 路径尽量短,减少节点消耗:多个强依赖的应用合并部署,简化调用方式 依赖尽量少:高优先级的系统减少对低优先级...原创 2019-03-17 11:34:06 · 513 阅读 · 0 评论 -
多线程笔记
1、多线程中 synchronized 锁升级的原理是什么?synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,...原创 2019-03-05 19:33:35 · 214 阅读 · 0 评论 -
java并发编程--自旋锁
自旋锁自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下01public class SpinLock {02 03 private AtomicReference<Thread> sign =new AtomicReference<>();04 05 public void lock(){06 Thread c...转载 2018-07-01 11:09:32 · 251 阅读 · 0 评论 -
多线程--死锁的产生以及如何避免
原文链接:https://blog.csdn.net/ls5718/article/details/51896159一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,2个人一...转载 2018-06-10 21:11:49 · 219 阅读 · 0 评论 -
ReenTrantLock可重入锁和synchronized的区别
原文链接:https://blog.csdn.net/qq838642798/article/details/65441415ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都...转载 2018-06-10 20:30:44 · 165 阅读 · 0 评论 -
多线程1-线程池
Executors框架简介Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逸出。E...原创 2018-05-06 15:42:01 · 197 阅读 · 0 评论 -
多线程2-工具类
1. 闭锁:CountDownLatch1.1 使用场景若有多条线程,其中一条线程需要等到其他所有线程准备完所需的资源后才能运行,这样的情况可以使用闭锁。1.2 代码实现// 初始化闭锁,并设置资源个数CountDownLatch latch = new CountDownLatch(2);Thread t1 = new Thread( new Runnable(){ public ...原创 2018-05-11 14:06:49 · 402 阅读 · 0 评论