
多线程并发
文章平均质量分 60
王也`
这个作者很懒,什么都没留下…
展开
-
死锁产生的条件以及死锁的避免
1.死锁产生的必要条件 互斥条件:进程对他所分配的资源进行排他性控制,就是当他持有资源的时候,不允许其他的线程来持有 请求和保持条件:当进程因请求请求资源被阻塞时,他获得的资源保持不放。 不剥夺条件:进程获得的资源在未使用完之间,不能被剥夺,只能在使用完时自己释放。 环路等待条件:p0等待p1持有的资源,p1等待p2持有的条件,p2等待p3持有的条件········ 2、解决死锁的基本方法破坏死锁产生的条件之一就行 资源一次性分配,这样就不会再有请求了(破坏原创 2022-04-15 21:11:56 · 726 阅读 · 0 评论 -
java中的Atomic原子类
并发包 java.util.concurrent 的原子类都存放在java.util.concurrent.atomic下,如下图所示。在JUC中原子类可以分成四类基本类型使用原子的方式更新基本类型 AtomicInteger:整形原子类 AtomicLong:长整型原子类 AtomicBoolean:布尔型原子类 数组类型使用原子的方式更新数组里的某个元素 AtomicIntegerArray:整形数组原子类 AtomicLongArra.原创 2022-04-14 10:37:27 · 302 阅读 · 0 评论 -
双重检验锁实现单例模式
先上代码public class Singleton{ private volatile static Singleton uniqueInstance; private Singleton(){ } public static Singleton getUniqueInstance(){ //先判断对象是否已经实例过,没有实例化过才进入加锁代码 if(uniqueInstance==null){原创 2022-04-14 09:41:19 · 656 阅读 · 0 评论 -
一文彻底理解线程池
一、使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 二、Executor框架1) 任务(Runnable /Callable)执行任务需要实现的 Runnable 接口 或 Callable接口。Runnable 接口或原创 2022-04-14 09:36:28 · 150 阅读 · 0 评论 -
synchrnized和 ReentrantLock 比较
目录1、两者都是可重入锁2、实现方式3、ReentrantLock 比 synchronized 增加了一些高级功能1、两者都是可重入锁“可重入锁” 指的是自己可以再次获取自己的内部锁。比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。同一个线程每次获取锁,锁的计数器都自增 1,所以要等到锁的计数器下降为 0 时才能释放锁。2、实现方式synchronized 依赖于 JVM 而.原创 2022-04-13 21:43:29 · 305 阅读 · 0 评论 -
java volatile关键字详解
目录一、并发编程的三个重要特性二、CPU 缓存模型三、JMM(Java 内存模型)一、并发编程的三个重要特性 原子性 : 一个的操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronized 可以保证代码片段的原子性。 可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。volatile 关键字可以保证共享变量的可见性。 有序性 :代码在执行的过原创 2022-04-13 21:40:19 · 163 阅读 · 0 评论 -
java的synchronized 关键字详解
java的synchronized 关键字详解,介绍了synchronized 的原理,synchronized 的优化,即偏向锁,轻量级锁,自旋锁,锁消除,锁加重原创 2022-04-13 21:27:40 · 1875 阅读 · 0 评论