java 之多线程 LOCK实现(二)
接上一节,回顾一下,锁的实现有一个缺陷:两个线程交替执行会死锁。现在我们来做另外一个双线程锁实现来解决这个缺陷:
public class ThreadLockImpl2 { private volatile int flag = 0; public void lock() { int threadId = ThreadUtil.getCurrentId(); flag = threadId; /** * 如果没有另外一个线程重置flag,则等待。 **/ while(flag == threadId) { } } public void unlock(){ }}?
这个锁实现的特点是,只要两个线程交替执行,则永远不会死锁。但是又会带来另外一个缺陷:如果一个线程单独顺序执行,则会死锁。