Java Unsafe 类解读

Java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作。
Unsafe提供了主要提供了3个功能:

  • 通过Unsafe分配内存,释放内存;
  • 定位对象字段的内存位置,通过内存位置修改对象的字段值;
  • 挂起线程与恢复线程;
  • CAS操作

Java Condition 线程间通信

Lock常用于处理线程同步,解决并发操作,然而,Lock也可以用来实现线程间通信。但是,Lock并不能直接进行线程通信,而是要借助Condition
根据Condition接口的定义,Condition提供了awaitsignalsignalAll等几个方法,分别对标Object对象的waitnotifynotifyAll方法。
Object对象的wait等方法,需要使用在synchronized方法或者代码块中,也即在调用这些方法前,需要获取到锁对象;同样,Condition对象的await等方法,也是首先需要获取到锁,只是获取锁的方式有所不同,使用的是Lock锁。

Java ReentrantLock 多线程同步锁

Java 锁对象 ReentrantLock,用于处理线程同步,和synchronized方法或者代码块类似,获取到锁对象的线程,将独享代码块,其它线程不能访问;
ReentrantLock实现了Lock接口(提供了lockunlocknewCondition等方法),实际是真正处理加锁,释放锁的是它的内部类Sync,而Sync又继承自 AbstractQueuedSynchronizer

Java 线程同步之 synchronized 和 Lock

线程的同步是为了防止多个线程访问一个数据对象时,对数据造成破坏。在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。
Java中线程执行步骤:

  1. 清空工作内存;
  2. 从主内存拷贝对象副本到工作内存;
  3. 执行代码(计算或者输出等);
  4. 刷新主内存数据;

Java Collection 之 Queue

Collection的子类,除了ListMap外,还有一类集合Queue,它是在两端出入的List,所以也可以用数组或链表来实现。队列可分为两类,普通队列和线程安全队列。普通队列包含LinkedListArrayDeque
线程安全队列又分为无界队列有界队列,有界队列常用于类似于生产者消费者的需求。

JavaScript Promise 异步流程控制

Promise 对象可以理解为一次执行的异步操作,使用 promise 对象之后可以使用一种链式调用的方式来组织代码。比如使用 ajax 发一个A请求后,成功后拿到数据,我们需要把数据传给B请求,传统的写法会有多个嵌套一层层写下去,或者把第二个请求提取成另外一个方法,但这样增加了阅读成本,并不能一眼看出这两个请求是流程化两个连续请求;