java lock 异常_为什么会出java.lang.IllegalMonitorStateException异常?

package threadExam;

import java.util.concurrent.locks.ReentrantLock;

class Thread1 extends Thread {

private ReentrantLock lock1;

private ReentrantLock lock2;

public Thread1(ReentrantLock lock1, ReentrantLock lock2)

{

this.lock1 = lock1;

this.lock2 = lock2;

}

public void run()

{

for (int i = 1; i <=52; i++)

{

System.out.print(i);

if (i % 2 == 0) {

lock1.lock();

lock2.unlock();

}

}

}

}

class Thread2 extends Thread {

private ReentrantLock lock1;

private ReentrantLock lock2;

public Thread2(ReentrantLock lock1, ReentrantLock lock2)

{

this.lock1 = lock1;

this.lock2 = lock2;

}

public void run()

{

for (int i = 0; i < 26; i++)

{

System.out.print((char)(i + 'A'));

lock2.lock();

lock1.unlock();

}

}

}

public class Exam1 {

public static void main(String[] args) {

// TODO Auto-generated method stub

ReentrantLock lock1 = new ReentrantLock();

ReentrantLock lock2 = new ReentrantLock();

Thread t1 = new Thread1(lock1, lock2);

Thread t2 = new Thread2(lock1, lock2);

lock2.lock();

t1.run();

t2.run();

}

}

运行后报错提示:

Exception in thread "main" java.lang.IllegalMonitorStateException

at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:151)

at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1261)

at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:457)

at threadExam.Thread1.run(Exam1.java:30)

at threadExam.Exam1.main(Exam1.java:67)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值