🛸~~ 🚁🚁🚁🛩️🛩️🛩️~|

n1ce2cv

园龄:5年2个月粉丝:4关注:1

锁的分类

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,它默认情况下是非公平锁,但是可以设置为公平锁。

本文作者:n1ce2cv

本文链接:https://www.cnblogs.com/sprinining/p/15348581.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   n1ce2cv  阅读(207)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起