zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/chang1024/p/12623742.html
Copyright © 2011-2022 走看看