关于JAVA锁的问题,请问这段代码哪有问题,如何实现这个需求?
想锁住一个处理过程,但是这个处理过程分两步,而且两步分别在两个不同的线程中执行。
整个处理过程只能被一个用户所独占,如果出现抢占,后来者需要等待。大致写了个原型代码,可发现不起作用,请教一下代码里有什么问题,该如何完成这个工作?多谢
package main;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static ReentrantLock locker = new ReentrantLock();
public static Condition cond = null;
public static boolean WINNER = true;
public class PhaseTow extends Thread {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
cond.signal();
locker.unlock();
SingleTest.WINNER = false;
}
}
public class PhaseOne extends Thread {
public void run() {
if (!SingleTest.WINNER) {
try {
cond.await();
} catch (Exception exp) {
}
}
SingleTest.WINNER = true;
cond = locker.newCondition();
locker.lock();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
PhaseTow tow = new PhaseTow();
tow.start();
}
}
public static void main(String[] args) {
LockTest obj = new LockTest();
for (int i = 0; i < 10; i++) {
PhaseOne element = obj.new PhaseOne();
element.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}