湖北网站建设推荐,磁力吧最佳搜索引擎,平度做网站,孟坤WordPress博客主题模板不可重入锁也叫自旋锁 指当一个方法调用了锁之后#xff0c;如持有本锁的另一个方法也想执行#xff0c;将会进入等待。那么想要使用这个方法必须先释放锁方可调用 public class Lock{private boolean isLocked false;public synchronized void lock() throws InterruptedEx…不可重入锁也叫自旋锁 指当一个方法调用了锁之后如持有本锁的另一个方法也想执行将会进入等待。那么想要使用这个方法必须先释放锁方可调用 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();}
} 可重入锁 指同一个线程里持有此锁的两个方法将均会执行不需要先释放但是另一个持有此锁的线程必须等待锁释放后才能使用 java里可重入锁如 synchronized public class Lock{boolean isLocked false;Thread lockedBy null;int lockedCount 0;public synchronized void lock()throws InterruptedException{Thread thread Thread.currentThread();while(isLocked lockedBy ! thread){wait();}isLocked true;lockedCount;lockedBy thread;}public synchronized void unlock(){if(Thread.currentThread() this.lockedBy){lockedCount--;if(lockedCount 0){isLocked false;notify();}}}
} 不可重入锁例子的话如下调用 public class Count{Lock lock new Lock();public void print(){lock.lock();doAdd();lock.unlock();}public void doAdd(){lock.lock();//do somethinglock.unlock();}
} 当调用print的时候由于获得锁导致doAdd使用时陷入while循环而等待所以需要先将锁释放后才可使用转载于:https://www.cnblogs.com/fengfenghuifei/p/10509661.html