自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 ThreadLocal详解

ThreadLocal本质上,ThreadLocal通过空间来换取时间,从而实现每个线程当中都会有一个变量的副本,这样每个线程就会操作改副本,从而完全规避了多线程的并发问题。 public T get() { // 获取到当前线程对象 Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { Thread

2020-07-30 14:12:59 169

原创 Java的Future模式

Future接口的作用Future表示异步计算的结果。 提供了一些方法来检查计算是否完成,等待其完成以及检索计算结果。 只有在计算完成时才可以使用get方法检索结果,必要时将其阻塞,直到准备就绪为止。 取消由cancel方法执行。 提供了其他方法来确定任务是正常完成还是被取消。 一旦计算完成,就不能取消计算。 如果出于可取消性的目的而使用Future而不提供可用的结果,则可以声明Future <?>形式的类型,并作为基础任务的结果返回null。Future接口提供的方法 // 取消任

2020-07-29 13:43:44 180

原创 CAS详解

CAS详解synchronized关键字与Lock等锁机制都是悲观锁:无论做何种操作,首先都需要上锁,接下来再去执行后续操作,从而确保了接下来所有的操作都是由当前线程来执行的。乐观锁:线程在操作之前不做任何预先的处理,而是直接去执行;当在最后执行变量更新的时候,当前线程需要有一种机制来确保当前被操作的变量是没有被其他线程修改的;CAS是乐观锁的一种极为重要的实现方式。CAS(Compare And Swap)比较与交换:这是一个不断循环的过程,一直到变量值被修改成功为止。CAS本身是由硬件指令来

2020-07-28 16:02:16 344

原创 CyclicBarrier使用场景

CyclicBarrier应用场景实现了若干个线程都到达了某一个具体的点,这些线程再同时开始执行。没有主次之分当所有线程都到达屏障之后,所有的线程开始执行

2020-07-28 13:32:58 1033

原创 CountDownLatch使用场景

CountDownLatch使用场景主程序等待所有子程序执行完成后再执行。若计数器的数量大于子线程的数量,即计数器没有减到0,则线程一直处于await状态。package com.learn.thread.countdown;import java.util.concurrent.CountDownLatch;import java.util.stream.IntStream;public class CountDownTest { public static void main(

2020-07-27 16:06:58 205

原创 volatile关键字详解

volatile关键字主要有三方面的作用实现long/double类型变量的原子性防止指令重排序实现变量的可见性

2020-07-23 15:30:41 285

原创 Condition详解

Condition详解传统上,我们可以同个synchronized关键字 + wait + notify/notifyAll 来实现多个线程之间的协调与通信,整个过程都是由JVM来帮助我们实现的;开发者无需(也无法)了解底层的细节。从JDK 1.5开始,并发包提供了Lock,Condition(await与signal/signalAll)来实现多个线程之间的协调与通信,整个过程都是开发者来控制的,而且相比于传统方式,更加灵活,功能也更加强大。Condition newCondition()返回一个绑

2020-07-22 14:09:21 1841

原创 Java Lock详解

Lock锁机制详解Lock锁方法详解Lock与synchronized关键字的区别

2020-07-21 17:09:07 799

原创 死锁与相关检测工具

死锁死锁、活锁与饿死死锁线程1等待线程2互斥持有的资源,而线程2也在等待线程1互斥持有的资源,两个线程都无法继续执行。活锁线程持续重试一个总是失败的操作,导致无法继续执行。饿死线程一直被调度器延迟访问其赖以执行的资源,也许是调度器先于低优先级的线程而执行高优先级的线程,同时总是会有一个高优先级的线程可以执行,饿死也叫做无限延迟。package com.learn.thread.deadlock;public class DeadLockTest { private Obje

2020-07-21 14:34:47 231

原创 synchronized关键字原理学习

synchronized关键字原理学习synchronized关键字原理详解如果一个对象有若干个synchronized方法,在某一时刻,只能有唯一的一个线程去进入到其中一个synchronized方法,其他的线程要去访问其他synchronized方法,也需要等待。 因为要尝试获取对象锁,当前对象只有一把锁。当一个类中有一个synchronized static方法时,线程进入这个方法时,获取到的锁不是当前对象的锁,而是当前对象对应class 的锁。package com.learn.thre

2020-07-17 15:00:49 236

原创 多线程wait()与notify()和notifyAll()方法的总结

多线程wait()与notify()和notifyAll()方法的总结wait和sleep的区别在调用wait方法时,线程必须持有调用对象的锁,当调用wait方法后,线程就会释放掉改对象的锁(monitor)。在调用wait方法时,线程必须持有调用对象的锁,当调用wait方法后,线程就会释放掉改对象的锁(monitor)。在调用Thread类的sleep方法时,线程是不会释放掉对象的锁的。wait()与notify()和notifyAll()方法的总结当调用wait时,首先需要确保

2020-07-16 15:49:57 496

原创 华为机试算法

本文主要是记录一下自己的思路。如果有不对的地方,希望大家多多指正。

2020-07-11 21:34:07 3056 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除