lock和Synchronized都是Java中用来解决线程安全的问题
Synchronized是Java中的一个关键字,Lock是JUC中的一个接口
Synchronized可以修饰在方法上,也可以修饰在代码块上,方法结束或者代码块结束,锁就会自动被释放。而Lock的加锁、释放锁的过程是手动的,更加的灵活。
JUC这个包下的类基本上包含了我们在并发编程时用到的一些工具,大致可以分为以下几类:
原子更新、锁和条件变量、线程池、阻塞队列、并发容器
抽象队列同步器Abstract Queued Synchronizer (简称AQS),是用来构建锁或者其他同步组件的骨架类,减少了各功能组件实现的代码量,也解决了在实现同步器时涉及的大量细节问题,例如等待线程采用FIFO队列操作的顺序。在不同的同步器中还可以定义一些灵活的标准来判断某个线程是应该通过还是等待。
基于AQS实现的组件,诸如:
ThreadLocal可以理解成每个线程都有自己专属的存储容器,它用来存储线程私有变量,每个线程可以通过set()和get()存取变量。