2020-04-02
Posted chang1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-04-02相关的知识,希望对你有一定的参考价值。
庚子鼠年 己卯月 乙亥日
描述
? 今天学习了JUC的相关知识,在此强烈推荐一本书,阿里孤尽的《码出高效》,虽然这本书我买了半年了,也看了一些,以前有很多地方看不懂,现在随着对java学习的深入,觉得这是一本很好的书。通过对线程,锁概念的学习,也意识到操作系统学习的重要性,以前学习操作系统的时候,觉得与web开发关系并不是那么大,认为操作系统就是win10,linux底层的一些东西,老师讲的时候又太偏于理论化,导致讲的时候听得云里雾里的。反思现在上网课的状态,上课基本没怎么听,挂着就去做其他事情了,现在的学习状态就是老师讲的时候不认真听,自己开发时,发现这块不懂,然后就去找资料学...,以后上课要好好听讲!
? 随着对java的深入学习,发现以前一直认为要好好学框架不是那么重要了,框架只是方便项目的搭建,而学习语言的底层,往往解决的是运行效率问题,线程安全问题等等,又一次感到了java的博大精深
随笔
java线程有6个状态
- 新生
- 运行
- 阻塞
- 等待
- 等待超时
- 终止
wait 与 sleep 的区别
- 来自不同的类
- 关于锁的释放wait会释放锁,sleep会抱着锁睡
- 使用范围是不同的wait必须在同步代码块中,sleep到处可以睡
Look锁
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替代方法:
- List list = new Vector<>();
- List list = Collections.synchronizedList(new ArrayList<> ());
- List list = new CopyOnWriteArrayList<>();
Set替代方法
- Set set = Collections.synchronizedSet(new HashSet<>());
- Set set = new CopyOnWriteArraySet<>();
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替代方法
- Map map = new ConcurrentHashMap<>()
try 与 return
- try中有return, 会先将值暂存,无论finally语句中对该值做什么处理,最终返回的都是try语句中的暂存值。
- 当try与finally语句中均有return语句,会忽略try中return。
以上是关于2020-04-02的主要内容,如果未能解决你的问题,请参考以下文章