线程_synchronized_volatile_ReentranLock

线程:cpu同时执行多个任务

synchonized   代码块,对象,类
同步方法和非同步方法可以同时执行
同步方法可以调用同步方法(重入)
脏读:之同步写,不同步读
死锁的demo  一个线程先对A加锁,然后在线程内对B加锁   另一个线程先对B加锁,后对A加锁
子类的同步方法可以调用父类的同步方法
同步方法抛出异常,锁会被释放,如果不想释放锁,try-catch异常
volatile 变量在线程之间可见(无锁同步)  效率比synchronized高的多  synchronized是重量级锁
volatile并不能保证多个线程同时修改同一个变量的一致性问题,也就说volatile并不能替代synchronized(既有可见性,又有原子性)
使用AtomXXX类的方法都是原子性的,但不保证多个方法连续调用是原子性的
锁定某对象o,如果o的属性发生改变,不影响锁的使用
但如果o变成另外一个对象,则锁定的对象发生改变
应该避免将锁定的对象的引用变成另外的对象
不要把字符串常量作为锁对象
object的wait()方法会释放锁,而notify()不会释放锁
 
CountDownLatch门闩  CountDownLatch c = new CountDownLatch(1);    await()   countDown()
 
ReentranLock 互斥锁
 ReetnranLock用于替代synchronized  更加灵活方便
 ReentranLock必须手动开启锁和释放锁,一般结合try-catch-finally使用
 ReentranLock可以进行“尝试获取锁”tryLock   线程可以在无法获取锁在指定时间内没有获得锁决定是否继续等待
 reentranLodk可以调用lockInterruptibly方法,可以对线程interrupt方法做出响应,在一个线程等待锁的过程中可以被打断
 ReentranLock可以指定为公平锁  在构造函数中指定true
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/huangpeideng/p/10256855.html
今日推荐