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替代方法:

  1. List list = new Vector<>();
  2. List list = Collections.synchronizedList(new ArrayList<> ());
  3. List list = new CopyOnWriteArrayList<>();

Set替代方法

  1. Set set = Collections.synchronizedSet(new HashSet<>());
  2. 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替代方法

  1. Map map = new ConcurrentHashMap<>()

try 与 return

  1. try中有return, 会先将值暂存,无论finally语句中对该值做什么处理,最终返回的都是try语句中的暂存值。
  2. 当try与finally语句中均有return语句,会忽略try中return。

你可能感兴趣的:(2020-04-02)