特性:
1.共享性
2.互斥性(同一时间,对一份资源,只允许一个线程对其进行写操作)
3.原子性(数据的操作是独立的,不可分割的整体。常见的方式加锁
4.可见性
5.有序性(为提高性能,编译器和处理器可能会对指令做重排序)
6.重排序(对于数据没有依赖的语句,处理器为了优化性能,可能会重新排序,这对单线程没有影响,但是对多线程可能有影响)
synchronized:
1.作用于一般的方法上,锁对象
2.作用于静态方法的上,锁类
3.作用于方法块上,根据锁的内容不同而不同
方法块的好处是,只锁同步块,更精确
Lock和ReadWriteLock
lock与synchronized对比:
1.并发不激烈时,性能相差不到,推荐使用synchronized,高并发时,synchronized会极具下降,推荐使用lock
2.synchronized不需要手动释放锁,而lock需要
3.lock可以使用tryLock等方法,更加灵活
4.lock若想实现wait,notify方法,需要借助Condition实现