我有一个主线程和一个工作线程。主线程将任务添加到队列中,工作线程取出任务并计算数据。在将对象放入队列之前,我在任务对象上调用 ReentrantLock 对象的锁定(在主线程上)。当工作线程完成从队列中的任务时,我在其上调用解锁操作(在工作线程上)。问题在于,我会因为在不同的线程上调用锁定和解锁而收到 IllegalMonitorStateException 异常。
我正在寻找一种替代的锁系统,在其中可以在不同的线程上执行此操作。
示例:
我正在寻找一种替代的锁系统,在其中可以在不同的线程上执行此操作。
示例:
public class Worker extends Thread {
public static Queue<Task> tasks = new ConcurrentLinkedQueue<Task>();
@Override
public void run() {
while (true) {
Task task = tasks.poll();
if (task != null) {
task.work();
task.lock.unlock(); // Here is the unlock, Task#i should not change up to now
}
}
}
}
public class Task {
private int i = 0;
public Lock lock;
public void setI(int i) {
lock.lock();
this.i = i;
lock.unlock();
}
public void work() {
System.out.println(i);
}
}
public class Test {
Task task = new Task();
public void addTask() {
task.lock.lock(); // Here is the lock, Task#i should not change
Worker.tasks.add(task);
}
}