• 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。
  • 相关阅读:
    系统吞吐量、TPS(QPS)、用户并发量、性能測试概念和公式
    限流实现与解决方案
    mysql事务,select for update,及数据的一致性处理
    **MySQL锁机制与用法分析**
    死锁的排查
    系统中异常的设计与处理
    Spring如何处理线程并发问题
    ThreadLocal作用、场景、原理
    Database Administration Statements
    mybatis 无法自动补全,没有获得dtd文件
  • 原文地址:https://www.cnblogs.com/chang1024/p/12623742.html
Copyright © 2020-2023  润新知