![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发与同步
冲冲冲!!!
这个作者很懒,什么都没留下…
展开
-
多线程环境中lock.trylock方法争抢锁
在多线程或分布式环境中,经常需要用到锁,trylock有两种用法,一种是不带参数:不设置等待时间,获取失败立即返回false。另一种是带等待时间的,线程会先挂起等待设置的时间结束如果还未获取到锁则返回false。下面来看一个多线程争抢锁的实例:public void execWithLock(Lock lock, Supplier<Boolean> supplier) { //Lock lock = new ReentrantLock(); //obtainLock(l原创 2022-01-10 21:07:21 · 2526 阅读 · 0 评论 -
Java线程的6种状态
Java的线程大致有6种状态:NEW:新建状态,new了一个线程。Runable:可执行状态,线程调用了start()或run()方法,或者等待结束,都会进入Runable状态,在操作系统或处理器而言,java的Runable状态可能是他们的就绪态或运行态,因为从就绪态到运行态是处理器决定的,Java无权过问,所以为了可以控制Java能控制的部分,方便理解和管理线程,Java将这种...原创 2019-05-26 15:46:56 · 3188 阅读 · 0 评论 -
Java多线程模型及实现方式
为什么要多线程并发?并发处理的广泛应用是使得阿姆达尔定律代替摩尔定律成为计算机发展源动力的根本原因,也是人类压榨计算机运算能力的最强有力武器。阿姆达尔(Amdahl)定律通过系统中并行化与串行化的比重来描述多个处理器系统能获得的运算加速能力。摩尔定律则用于描述处理器晶体管数量与运行效率之间的发展关系。这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程。...原创 2019-05-26 15:46:07 · 4355 阅读 · 0 评论 -
计算机内存体系与Java 内存模型
计算机内存相关硬件介绍与缓存一致性:让计算机并发执行若干个任务与更充分的利用计算机处理器的效能之间的因果关系,非常的复杂,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器计算就能完成的,处理器至少要与内存交互,如:读取运算数据,存储运算结果等。这个IO操作是很难消除的(无法仅靠寄存器来完成所有的运算任务)。由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系...原创 2019-05-26 15:39:41 · 3624 阅读 · 0 评论 -
Java 多线程同步关键字synchronized各种用法/特性 总结
一、synchronized锁对象:1. synchronizedd锁对象的两种方式:一种是在方法里面使用synchronizedd代码块:public void testSyncObj() { synchronized (this) { System.out.println("锁对象的方式一:synchronized代码块"); }}还有一...原创 2019-05-17 00:01:06 · 2947 阅读 · 0 评论 -
Java 多线程同步妙招 -- CountDownLatch计数器
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他n个批量任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。比如我们要监控所有上游系统的状态,于是可以用一个线程池去跑每个上游系统的健康状态,等他们全部跑完我们才能返回所有系统的检测结果,这是后就可以在初始化线程池的时候...原创 2019-04-08 10:45:47 · 1346 阅读 · 0 评论 -
Java 线程安全与锁优化
什么是线程安全?线程安全经常会被各种行业大佬或者面试官大佬挂在嘴边,如何找到一个通俗易懂一点的方式解释线程安全呢,伟大的砖家给出了答案:如果一个对象可以安全的被多个对象使用,那它就是线程安全的。是的,这种回答非常的巧妙精彩…巧妙到你无法怼它是错误的…但是也无法从中找到任何有用信息…众多定义中,《Java Concurrency In Practice》的作者Brian Goetz对线程安全...原创 2019-05-25 14:56:53 · 3339 阅读 · 1 评论 -
Java 线程间的通信wait(), notify(), join(), ThreadLocal讲解
等待/通知机制(wait/notify)线程与线程之间不一定是独立的个体,他们之间可以相互通信和协作。等待通知机制的应用案例非常广泛,比如常见的消息发布订阅就是一种等待通知的实现,一个线程订阅某个消息/事件,然后就开始等待,然后另一个线程发布这个消息,然后通知第一个线程,第一个线程接收这个消息并处理。Java多线程中等待通知机制的实现离不开下面这两个方法:1)wait() :...原创 2019-05-19 20:34:03 · 3159 阅读 · 0 评论 -
Java volatile关键字特性介绍
一句话概括:关键字volatile的主要作用是使变量在多个线程间可见。补充介绍:了解过JVM工作原理的都应该知道,在多线程环境中,每个私有线程会拷贝公共堆栈上需要用到的变量数据,然后读取变量是从私有数据栈中读取的,这样可能造成读取的数据不是实时的,出现脏读情况。而用volatile修饰的公共变量则每次都强制从公共堆栈中取得变量的值,而不是从私有数据栈中读取。这样至少能保证每次读取...原创 2019-05-19 19:26:26 · 3540 阅读 · 0 评论 -
Thread和Runable比较
大多数情况下,不考虑代码书写方式,这两个都是可以实现多线程功能的。所以他们的区别并不是性能上 功能上的区别,而是书写方式,代码可维护性,松耦合性 以及操作方便等方便的区别了。1. 最直接的区别就是Runable是接口,是支持多继承的,也就是实现类也可以实现其他的接口,降低了耦合。而Tread是类,只能被单一继承,这样它的子类不能再继承其他类了,增加了耦合性。2. Runable书写更加方便...原创 2019-05-19 17:17:39 · 3655 阅读 · 1 评论