关于JAVA锁的问题,请问这段代码哪有问题,如何实现这个需求?

kamikameha 2012-03-16 05:00:05
想锁住一个处理过程,但是这个处理过程分两步,而且两步分别在两个不同的线程中执行。
整个处理过程只能被一个用户所独占,如果出现抢占,后来者需要等待。大致写了个原型代码,可发现不起作用,请教一下代码里有什么问题,该如何完成这个工作?多谢

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) {
}
}
}
}
...全文
72 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧