标签:cep cat java关键字 col 不同 手动 关于 ace 重入
? 今天学习了JUC的相关知识,在此强烈推荐一本书,阿里孤尽的《码出高效》,虽然这本书我买了半年了,也看了一些,以前有很多地方看不懂,现在随着对java学习的深入,觉得这是一本很好的书。通过对线程,锁概念的学习,也意识到操作系统学习的重要性,以前学习操作系统的时候,觉得与web开发关系并不是那么大,认为操作系统就是win10,linux底层的一些东西,老师讲的时候又太偏于理论化,导致讲的时候听得云里雾里的。反思现在上网课的状态,上课基本没怎么听,挂着就去做其他事情了,现在的学习状态就是老师讲的时候不认真听,自己开发时,发现这块不懂,然后就去找资料学...,以后上课要好好听讲!
? 随着对java的深入学习,发现以前一直认为要好好学框架不是那么重要了,框架只是方便项目的搭建,而学习语言的底层,往往解决的是运行效率问题,线程安全问题等等,又一次感到了java的博大精深
class Ticket {
// 属性、方法
Lock lock = new ReentrantLock();
public void sale(){
lock.lock(); // 加锁
try {
// 业务代码
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock(); // 解锁
}
}
}
Synchronized 和 Lock 区别
1、Synchronized 内置的Java关键字, Lock 是一个Java类
2、Synchronized 无法判断获取锁的状态,Lock 可以判断是否获取到了锁
3、Synchronized 会自动释放锁,lock 必须要手动释放锁!如果不释放锁,死锁
4、Synchronized 线程 1(获得锁,阻塞)、线程2(等待,傻傻的等);Lock锁就不一定会等待下 去;
5、Synchronized 可重入锁,不可以中断的,非公平;Lock ,可重入锁,可以 判断锁,非公平(可以 自己设置);
6、Synchronized 适合锁少量的代码同步问题,Lock 适合锁大量的同步代码!
ArrayList替代方法:
Set替代方法
hashSet底层是什么
public HashSet() {
map = new HashMap<>();
}
// add set 本质就是 map key是无法重复的!
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
private static final Object PRESENT = new Object(); // 不变得值!
Map替代方法
标签:cep cat java关键字 col 不同 手动 关于 ace 重入
原文地址:https://www.cnblogs.com/chang1024/p/12623742.html