CompletableFuture使用教程 一、简介Future是Java 5中添加作为异步计算的结果,但它没有任何方法处理计算可能出现的错误。 而CompletableFuture是在Java8后开始引进的,CompletableFuture提供了非常强大的Future的扩展功能,可以简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。 Com 2023-04-05 后端 > java #volatile
Java并发编程之volatile 1 volatile简介volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。volatile执行成本比synchronized底,因为它不会引起线程上下文的切换和调度。 如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致 特性: 1 可 2023-03-06 后端 > java #volatile
java数据结构ConcurrentHashMap 1.HashMap 和 ConcurrentHashMap 的区别JDK1.7 ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用lock锁进行保护,相对于HashTable的synchronized锁的粒度更精细了一些,并发性能更好,而HashMap没有锁机制,不是线程安全的。(JDK1.8之后ConcurrentHashMap启用了一种全新的 2023-03-05 后端 > java #ConcurrentHashMap
spring bean生命周期 1 Spring Bean 生命周期Spring Bean的生命周期指的是Bean从创建到初始化再到销毁的过程,这个过程由IOC容器管理。 Bean的初始化和销毁 在整个生命周期过程中,我们可以自定义Bean的初始化和销毁钩子函数,当Bean的生命周期到达相应的阶段的时候,Spring会调用我们自定义的Bean的初始化和销毁方法。自定义Bean初始化和销毁方法有多种方式 。 实例化:实例化 2023-03-05 后端 > java #spring
为什么HashMap的底层数组长度为何总是2的n次方? 1 说明每次扩容后,原数据都会进行数据迁移,根据二进制的计算,扩容后数据要么在原来位置,要么在【原来位置+扩容长度】,这样就不需要重新hash,效率上更高。 HashMap根据用户传入的初始化容量,利用无符号右移和按位或运算等方式计算出第一个大于该数的2的幂。 使数据分布均匀,减少碰撞 当length为2的n次方时,h&(length - 1) 就相当于对length取模,而且在速度、 2023-03-04 后端 > java #HashMap
多线程执行一定比串行执行快吗? 1 并发编程将串行执行部分变成并发执行,但要考虑上下文切换和资源调度的时间 并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。 2 多线程程序的评量标准 安全性——不损坏对象 对象损坏指对象的状态不符合设计师的设计原意,通常是对象的字段所取得的值和预期不一样。 生存性——进行必要的处理 最典型的例子就是死锁 复用性——可再利用类 类的复用性,在写 2023-03-04 后端 > java #并发编程
java数据结构HashMap 1、 影响HashMap性能的重要参数初始容量:创建哈希表(数组)时桶的数量,默认为 16 负载因子:哈希表在其容量自动增加之前可以达到多满的一种尺度,默认为 0.75 2、HashMap工作原理 HashMap底层是hash数组和单向链表实现,数组中的每个元素都是链表,由Node内部类(实现Map.Entry<K,V>接口)实现,HashMap通过put&get方法存储 2023-03-04 后端 > java #HashMap
Java并发编程之Lock 1、Lock接口Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。 使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。 Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。 它允许更灵活的结构,可以具有完全不同的性质 2023-03-04 后端 > java #并发编程
Java并发编程之并发容器和框架 1 阻塞队列说明一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 1)支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。 2)支持阻塞的移除方法:在队列为空时,获取元素的线程会等待队列变为非空。 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。 2023-03-04 后端 > java #并发编程
Java并发编程之synchronized原理 一、锁锁是用来控制多个线程访问共享资源的方式,能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。 锁可以让临界区互斥执行 锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 二、synchronized普通同步方法:对于普通同步方法,锁是当前实例对象。 12public synchroni 2023-03-04 后端 > java #并发编程