Java进阶学习

多线程并发编程

2019-04-17  本文已影响0人  Sum_Day

Wait/NotifyAll标准使用

等待方线程
1.获取对象锁
2.判断条件
代码写法
sync(对象){
    while(条件){
        wait();//线程在此处等待,唤醒后继续执行后续方法doFun();
        doFun();//唤醒的后续操作
    }
}

修改方线程
1.获取对象锁
2.修改判断条件
代码写法
sync(对象){
    //修改条件后
    notifyAll();//通知所以线程继续执行
}

锁的特性/分类

  1. 公平、非公平锁
  2. 可重入锁
  3. 排他、非排他锁

Synchronized 内部锁(虚拟机实现)

  1. 锁的是对象实例
  2. 可重入锁
  3. 非公平锁

Lock:显示锁(代码实现)

  1. ReentrantLock:普通可重入锁(支出公平和非公平锁)
Lock lock = new ReentrantLock(true/false)

1.一定要用try/finally包裹

public void work(){
    lock.lock();
    try{
        //do work
    }finally{
        lock.unlock();
    }
}
  1. ReadWriteLock:读写锁 频率->读:写=>10:1
1.读非排他锁,写排他锁
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
Lock readLock = readWriteLock.readLock();//读线程
Lock writeLock = readWriteLock.writeLock();//写线程

2.ReentrantReadWriteLock 高效读,写安全

上一篇 下一篇

猜你喜欢

热点阅读