JUC
- cpu多核
public class Test1 {
public static void main(String[] args) {
// 获取cpu核数
// cpu密集型 io密集型
System.out.println(Runtime.getRuntime().availableProcessors());
}
}
- wait会释放锁,sleep不会释放
- wait必须在同步代码块中,sleep任意位置
- wait不要捕获异常,sleep必须捕获
锁的分类
可重入锁
如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行方法method2。
可中断锁
synchronized就不是可中断锁,而Lock是可中断锁。如果某一线程A正在执行锁中的代码,另一线程B正在等待获取该锁,可能由于等待时间过长,线程B不想等待了,可以让它中断自己或者在别的线程中中断它。
公平锁
公平锁即尽量以请求锁的顺序来获取锁。多个线程在等待一个锁,当这个锁被释放时,等待时间最久的线程(最先请求的线程)会获得锁,这种就是公平锁。非公平锁即无法保证锁的获取是按照请求锁的顺序进行的。这样就可能导致某个或者一些线程永远获取不到锁。
synchronized就是非公平锁,它无法保证等待的线程获取锁的顺序。而对于ReentrantLock和ReentrantReadWriteLock,它默认情况下是非公平锁,但是可以设置为公平锁。