【发布时间】:2016-12-30 21:09:55
【问题描述】:
我有一个包含数据的对象,我正在使用该对象排队一个动作(与可以执行的方法的接口)(该动作将在其方法中使用对象的数据),并且排队的动作将被执行来自另一个线程。
我想在将对象发送到操作队列后锁定它(所以从我的主线程)。
因为我不希望对象的数据在其他线程通过操作队列处理它之前被更改。
我希望在处理动作队列后从另一个线程解锁对象。
代码说明:
// THREAD 1
final Object object = getObjectFromSomeWhere();
// lock the object here
concurrentActionQueue.add(new Action() {
@Override
public void execute() {
// will be executed from THREAD 2
// do something with object
//unlock here once the data is processed
}
您会说我可以将对象的副本发送到 Action,但我的对象包含非常大的数据并且复制需要很长时间,所以我不能。
有没有办法在我的对象不硬编码 lock() 和 unlock() 方法的情况下做到这一点?
【问题讨论】:
-
消费者生产者模式可能吗?这是一个非常简单(不是最好的)tutorial 开始
标签: java multithreading