并发锁

来源:互联网 发布:scilab 矩阵作差 编辑:程序博客网 时间:2024/06/16 23:15

不可重入锁

public class Lock{    private boolean isLocked = false;    public synchronized void lock() throws InterruptedException{        while(isLocked){                wait();        }        isLocked = true;    }    public synchronized void unlock(){        isLocked = false;        notify();    }}

这其实是个不可重入锁,举个例子

public class Count{    Lock lock = new Lock();    public void print(){        lock.lock();        doAdd();        lock.unlock();    }    public void doAdd(){        lock.lock();        //do something        lock.unlock();    }}

当调用print()方法时,获得了锁,这时就无法再调用doAdd()方法,这时必须先释放锁才能调用,所以称这种锁为不可重入锁,也叫自旋锁。