【发布时间】:2021-03-07 06:37:35
【问题描述】:
我在我的代码中使用锁定和解锁并启动一些客户和生产者线程。 行 lock.waite 抛出 IllegalMonitorStateException。为什么? 加了锁,一个Thread不提供使用这个列表的条件?
static class Customeer extends Thread {
private List<String> list;
private Lock lock;
public Customeer(List<String> list, Lock lock) {
this.list = list;
this.lock = lock;
}
@Override
public void run() {
lock.lock();
if (list.size() == 0) {
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.remove(0);
lock.unlock();
}
}
static class Producer extends Thread {
private List<String> list;
private Lock lock;
public Producer(List<String> list, Lock lock) {
this.list = list;
this.lock = lock;
}
@Override
public void run() {
lock.lock();
list.add("hello");
list.notify();
lock.unlock();
}
}
【问题讨论】:
标签: java multithreading locking