摘要:
一、什么是CAS Compare And Swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它是一条CPU的原子指令,包含三个操作数——内存位置、预期原值及更新值。 执行CAS操作的时候,将内存位置的值与预期原值比较。 如果相匹配,那么处理器会自动将该位置值更新为新值。 如果不匹 阅读全文
摘要:
一、被volatile修饰变量的两大特点 可见性。 有序性。 二、语义 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。 当读一个volatile变量时,JMM会把该线程对应的本地内存设置为无效,直接从主内存中读取共享变量。 所以volatile的写内 阅读全文
摘要:
一、什么是JMM? 因为CPU运算速度远大于物理主存,CPU运行时并不是直接操作内存而是先把内存里面的数据读到缓存,因此内存的读和写操作就会造成不一样的问题。 Java虚拟机规范中试图定义一种Java内存模型(java Memory Model,简称JMM)来屏蔽掉各种硬什和操作系统的内存访问差异, 阅读全文
摘要:
一、Object的wait、notify 注: 1、wait、notify必须绑定synchronized使用。 2、wait、notify有先后顺序,必须先等待后唤醒。 3、wait后,会释放锁。 public class TestDemo01 { static Object obj = new 阅读全文
摘要:
一、什么是中断? 首先, 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop、Thread.suspend、Thread.resume都已经被废弃了。 其次, 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。 因此 阅读全文
摘要:
public class test { public static void main(String[] args) { Phone phone = new Phone(); new Thread(() -> { phone.sendEmail(); }).start(); new Thread(( 阅读全文
摘要:
一、悲观锁 概念:在获取数据时会先加锁,确保数据不会被别的线程修改。 场景:适合写操作多的场景,先加锁可以保证写操作时数据正确。 实现:synchronized关键字和Lock的实现类都是悲观锁。 二、乐观锁 概念:获取数据时认为不会有别的线程修改数据,所以不会上锁,但是在更新时会判断有没有别的线程 阅读全文
摘要:
注: 方法名以”Async“结尾的区别:(如thenApply和thenApplyAsync) thenApply:当前任务的线程继续执行“thenApply”的任务。 thenApplyAsync:把“thenApplyAsync”这个任务继续交给线程池来进行执行。 一、获得结果和触发计算 1、获 阅读全文
摘要:
一、基础 Future:Future接口定义了操作异步任务执行的方法,如获取任异步任务的执行结果、取消异步任务的执行、判断任务执行是否完毕等。 Callable:Callable接口定义了需要有返回结果的任务需要实现的方法。 二、Future的缺点。 阻塞。必须手动futureTask.get()查 阅读全文
摘要:
为什么要使用多线程? 1、硬件方面:硬件发展技术到达瓶颈,cpu主频已经无法提升,现在采用多核而不是更快的主频。想让程序更快就要采用并行或并发编程。 2、软件方面:高并发系统,处理异步+回调等生产需求。充分应用多核cpu优势。 一、进程 进程Process是计算机中的程序关于某数据集合伤的一次运行活 阅读全文