随笔分类 - 多线程相关
摘要:面试官问到,阻塞线程有几种方法? 你可以这么扩展的讲。 4种方法,从是否释放锁资源的角度来说,locksupport.park(),thread.sleep()不会是否锁资源, condition.await()/object.wait()会释放锁资源。接下来按照下图,讨论区别
阅读全文
摘要:一、为啥有四种引用? 在Java的世界中,如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些“食之无味,弃之可惜”的对象就显得无能为力。 我们希
阅读全文
摘要:或许你经常被问到? Volatile关键字有何作用? 实现这些作用的底层如何实现? Volatile能够保障可见性、有序性?原子性吗? 前言 我们都知道,Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用
阅读全文
摘要:读了本文,你会知道,为什么不加volatile关键字的单例模式不是线程安全的 有经验的开发者都知道双重锁定检查(DCL,Double Check Lock)的单例是最优秀的,如下文所示: 1 public class Singleton { 2 private static Singleton in
阅读全文
摘要:一张图搞明白Java线程状态 1,如图所示,总共有6个状态
阅读全文
摘要:若你不明白下面的问题,可以继续看。 1.线程正在执行,interrupt可以打断吗?sleep可以打断吗? 2.stop 和interrupt有什么区别? 话不多说,上代码 1 /** 2 * Descritpion: 3 * 4 * @auther wangpeng 5 * @create 202
阅读全文
摘要:ThreadLocal 其本质上就是避免共享 正所谓是没有共享,就没有伤害.下面来看看ThreadLocal 的源码,Thread类中包含了一个threadLocals变量,它是一种ThreadLocal.ThreadLocalMap类型,该类型定义在ThreadLocal类里面,也就是一个内部类。
阅读全文
摘要:Copy-on-Write模式一种延时策略,只有在真正需要复制的时候才复制,而不是提前复制好,同时 Copy-on-Write 还支持按需复制. Copy-on-Write 最大的应用领域还是在函数式编程领域函数式编程的基础是不可变性(Immutability),所以函数式编程里面所有的修改操作都需
阅读全文
摘要:不变性(Immutability)模式 所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。 一、如何让一个类具有不变性呢 将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,
阅读全文
摘要:目前一个询价应用,这个应用需要从三个电商询价,然后保存在自己的数据库里。核心示例代码如下 ,由于是串行的,所以性能很慢 1 // 向电商 S1 询价,并保存 2 r1 = getPriceByS1(); 3 save(r1); 4 5 // 向电商 S2 询价,并保存 6 r2 = getPrice
阅读全文
摘要:什么是异步化? 将串行执行的流程任务,拆分成多线程操作,可以实现异步化编程。异步编程,也能使程序更快。 java中的异步编程类CompletableFuture 我们先来看一个例子: 泡茶的过程,我们分了 3 个任务:任务 1 负责洗水壶、烧开水,任务 2 负责洗茶壶、洗茶杯和拿茶叶,任务 3 负责
阅读全文
摘要:一.获取线程执行的结果 很多场景下,我们需要获取线程执行完的结果 。而ThreadPoolExecutor 提供的 3 个 submit() 方法和 1 个 FutureTask 工具类来支持,如图,3个submit()方法如下,返回的是Future接口。 View Cod 1 public cla
阅读全文
摘要:有没有思考过,为什么要用线程池? 想必你已经猜到,Java创建对象,仅在JVM堆中分配一块内存,创建线程,却需要调用操作系统API,操作系统再分配一系列资源,是一个非常耗时,好资源的过程。惯用思想,池化资源,得到共用。 想法没错,但是java的自带的线程池并不是采用池化资源来设计的,而是生产者-消费
阅读全文
摘要:Java SDK 并发包里提供的原子类内容很丰富,我们可以将它们分为五个类别:原子化的基本数据类型、原子化的对象引用类型、原子化数组、原子化对象属性更新器和原子化的累加器。这五个类别提供的方法基本上是相似的,并且每个类别都有若干原子类,你可以通过下面的原子类组成概览图来获得一个全局的印象。 1. 原
阅读全文
摘要:Semaphore,信号量,常用于限制可以访问某些资源的线程数量,比如连接池、对象池、线程池等等。其中,你可能最熟悉数据库连接池,在同一时刻,一定是允许多个线程同时使用连接池的,当然,每个连接在被释放前,是不允许其他线程使用的。 信号量实现了一个最简单的互斥锁功能。估计你会觉得奇怪,既然有 Java
阅读全文
摘要:例如,有三个方法 A、B、C,他们的调用关系是 A->B->C(A 调用 B,B 调用 C),在运行时,会构建出下面这样的调用栈。每个方法在调用栈里都有自己的独立空间,称为栈帧,每个栈帧里都有对应方法需要的参数和返回地址。当调用方法时,会创建新的栈帧,并压入调用栈;当方法返回时,对应的栈帧就会被自动
阅读全文

浙公网安备 33010602011771号