12 2021 档案

摘要:一、什么是ThreadLocal ThreadLocal,提供线程局部变量。这些变量与正常的变量不同,因为每个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(例如,用 阅读全文
posted @ 2021-12-31 16:29 幻月hah 阅读(51) 评论(0) 推荐(0) 编辑
摘要:LongAdder,在无竞争的情况下跟AtomicLong一样,对同一个base进行操作。当出现竞争关系时则是采用化整为零的做法,用空间换时间,用一个数组cells,将一个value拆分进这个数组cells。多个线程需要同时对value进行操作时候,可以对线程id进行hash得到hash值,再根据h 阅读全文
posted @ 2021-12-30 17:24 幻月hah 阅读(153) 评论(0) 推荐(0) 编辑
摘要:使用目的: 以一种线程安全的方式操作非线程安全对象内的某些字段。 优点: 不用对对象加锁,只针对对象的某个属性进行原子类操作,提高并发性。 使用方式: 1、更新的对象属性必须使用public volatile修饰符。 2、因为对象的属性修改类型原子类都是抽象类,所以每次使用都必须使用静态方法newU 阅读全文
posted @ 2021-12-30 15:54 幻月hah 阅读(73) 评论(0) 推荐(0) 编辑
摘要:一、什么是CAS Compare And Swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它是一条CPU的原子指令,包含三个操作数——内存位置、预期原值及更新值。 执行CAS操作的时候,将内存位置的值与预期原值比较。 如果相匹配,那么处理器会自动将该位置值更新为新值。 如果不匹 阅读全文
posted @ 2021-12-28 17:27 幻月hah 阅读(69) 评论(0) 推荐(0) 编辑
摘要:一、被volatile修饰变量的两大特点 可见性。 有序性。 二、语义 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。 当读一个volatile变量时,JMM会把该线程对应的本地内存设置为无效,直接从主内存中读取共享变量。 所以volatile的写内 阅读全文
posted @ 2021-12-24 10:51 幻月hah 阅读(58) 评论(0) 推荐(0) 编辑
摘要:一、什么是JMM? 因为CPU运算速度远大于物理主存,CPU运行时并不是直接操作内存而是先把内存里面的数据读到缓存,因此内存的读和写操作就会造成不一样的问题。 Java虚拟机规范中试图定义一种Java内存模型(java Memory Model,简称JMM)来屏蔽掉各种硬什和操作系统的内存访问差异, 阅读全文
posted @ 2021-12-23 15:06 幻月hah 阅读(95) 评论(0) 推荐(0) 编辑
摘要:一、Object的wait、notify 注: 1、wait、notify必须绑定synchronized使用。 2、wait、notify有先后顺序,必须先等待后唤醒。 3、wait后,会释放锁。 public class TestDemo01 { static Object obj = new 阅读全文
posted @ 2021-12-22 18:42 幻月hah 阅读(215) 评论(0) 推荐(0) 编辑
摘要:一、什么是中断? 首先, 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop、Thread.suspend、Thread.resume都已经被废弃了。 其次, 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。 因此 阅读全文
posted @ 2021-12-22 17:04 幻月hah 阅读(83) 评论(0) 推荐(0) 编辑
摘要:public class test { public static void main(String[] args) { Phone phone = new Phone(); new Thread(() -> { phone.sendEmail(); }).start(); new Thread(( 阅读全文
posted @ 2021-12-22 11:43 幻月hah 阅读(40) 评论(0) 推荐(0) 编辑
摘要:一、悲观锁 概念:在获取数据时会先加锁,确保数据不会被别的线程修改。 场景:适合写操作多的场景,先加锁可以保证写操作时数据正确。 实现:synchronized关键字和Lock的实现类都是悲观锁。 二、乐观锁 概念:获取数据时认为不会有别的线程修改数据,所以不会上锁,但是在更新时会判断有没有别的线程 阅读全文
posted @ 2021-12-21 17:20 幻月hah 阅读(124) 评论(0) 推荐(0) 编辑
摘要:注: 方法名以”Async“结尾的区别:(如thenApply和thenApplyAsync) thenApply:当前任务的线程继续执行“thenApply”的任务。 thenApplyAsync:把“thenApplyAsync”这个任务继续交给线程池来进行执行。 一、获得结果和触发计算 1、获 阅读全文
posted @ 2021-12-21 15:44 幻月hah 阅读(834) 评论(0) 推荐(0) 编辑
摘要:一、基础 Future:Future接口定义了操作异步任务执行的方法,如获取任异步任务的执行结果、取消异步任务的执行、判断任务执行是否完毕等。 Callable:Callable接口定义了需要有返回结果的任务需要实现的方法。 二、Future的缺点。 阻塞。必须手动futureTask.get()查 阅读全文
posted @ 2021-12-20 17:29 幻月hah 阅读(186) 评论(0) 推荐(0) 编辑
摘要:为什么要使用多线程? 1、硬件方面:硬件发展技术到达瓶颈,cpu主频已经无法提升,现在采用多核而不是更快的主频。想让程序更快就要采用并行或并发编程。 2、软件方面:高并发系统,处理异步+回调等生产需求。充分应用多核cpu优势。 一、进程 进程Process是计算机中的程序关于某数据集合伤的一次运行活 阅读全文
posted @ 2021-12-20 11:48 幻月hah 阅读(85) 评论(0) 推荐(0) 编辑
摘要:一、Linux 1.redis.conf文件 (1)修改daemonize 改为 daemonize yes(2)修改protected-mode yes 改为 protected-mode no(3)注释掉 #bin 127.0.0.1 2.设置开机自启动 在redis安装目录中找到/utils/ 阅读全文
posted @ 2021-12-10 16:48 幻月hah 阅读(109) 评论(0) 推荐(0) 编辑
摘要:一、什么是Spring三级缓存 第一级缓存:也叫单例池,存放已经经历了完整生命周期的Bean对象。 第二级缓存:存放早期暴露出来的Bean对象,实例化以后,就把对象放到这个Map中。(Bean可能只经过实例化,属性还未填充)。 第三级缓存:存放早期暴露的Bean的工厂。 注: 只有单例的bean会通 阅读全文
posted @ 2021-12-02 15:31 幻月hah 阅读(7085) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示