锁机制
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(); }