锁机制

1.为什么使用锁:

解决并发操作数据引起脏读,数据不一致的情况;

锁对象:java中任何非null对象;

2.实现方法:

有两种方式:synchronized关键字和并发包中的锁类

// (1):加静态方法上面,表示会监视这个类对象
public static synchronized void staticFunc() {
    //dosomething
}

//(2):加实例方法上面,表示监视当前这个实例对象,我们常说的this
public synchronized void virtualFunc() {
    //dosomething
}

public void monitorThis() {
    //(3):加代码块上面,括号里面传入的是需要监视的对象,这里是this
    synchronized (this){
    }
}

private Object lock = new Object();
public void monitorObject() {
    //(4):自己new了一个lock对象,然后监视lock对象
    synchronized (lock) {
    }
}
private ReentrantLock lock = new ReentrantLock();
 public void testLock() {
        // 获取锁
        lock.lock();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("test ReentrantLock ");
        // 释放锁
        lock.unlock();
  }

 

posted @ 2020-02-18 19:45  ZJfor  阅读(154)  评论(0编辑  收藏  举报