很多synchronized里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。
synchronized隐式地获得、释放锁,ReentrantLock显式地获得、释放锁。等待可中断,即持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待。ReentrantLock可以通过Condition类绑定多个条件,实现分组唤醒需要唤醒的线程们。
主内存和工作内存之间的交互分为8个原子操作: - lock - unlock - read - load - assign - use - store - write - volatile修饰的变量,只有对volatile进行assign操作,才可以load,只有lo...
同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。
使用 async await 配合 promise是解决回调地狱的终极方法 async/await特点:1, async/await更加语义化,async 是“异步”的简写,async function 用于申明一个 function 是异步的; await,可以认为是async wait的简写, 用于等待一个异步方法执行完成;