Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
整体上来说Lock是synchronized的扩展版,Lock提供了无条件的、可轮询的(tryLock 方法)、定时的(tryLock 带参方法)、可中断的(lockInterruptibly)、可多条件队列的(newCondition 方法)锁操作。
什么是自旋?
很多synchronized里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。
很多人都说要慎用ThreadLocal,谈谈你的理解?
使用时需要注意以下几点:- 线程之间的threadLocal变量是互不影响的 - 使用private final static进行修饰,防止多实例时内存的泄露问题 - 线程池环境下使用后将threadLocal变量remove掉或设置成一个初始值
synchronized和ReentrantLock的异同点
synchronized隐式地获得、释放锁,ReentrantLock显式地获得、释放锁。等待可中断,即持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待。ReentrantLock可以通过Condition类绑定多个条件,实现分组唤醒需要唤醒的线程们。
cookie, localStorage,sessionStorage 的区别
以路径存储,上层路径不能访问下层的路径cookie,下层的路径cookie可以访问上层的路径cookie。可存储的数据有限,且依赖于服务器,无需请求服务器的数据尽量不要存放在cookie 中,以免影响页面性能。 可设置过期时间。