马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 minamikotori 于 2022-12-8 22:07 编辑 class MyThread2 extends Thread{
private static int ticket = 100;
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true){
try {
lock.lock();
if (ticket > 0) {
System.out.println(currentThread().getName() + ":" + ticket);
ticket--;
} else
break;
} finally {
lock.unlock();
}
}
}
}
public class LockTest {
public static void main(String[] args) {
MyThread2 myThread1 = new MyThread2();
MyThread2 myThread2 = new MyThread2();
MyThread2 myThread3 = new MyThread2();
myThread1.start();
myThread2.start();
myThread3.start();
}
}
为什么会出现3个100呢,而99到1都是正常的,使用实现Runnable方法的时候就是正常的
楼主尝试把lock改成static后发现就变正常了 应该是没有使用同一个锁的问题导致的
但是为什么没有static时,只有100会出现异常 其余数字仅出现一次
|