有没有办法使对象只能由访问特定方法的第一个线程使用?

时间:2016-05-05 00:32:53

标签: java multithreading concurrency thread-safety java-6

我想要一个可以由任何线程创建的对象,但是当线程调用myObject.use()时,它只能被该线程使用,直到myObject.release()被调用。

我不想强迫开发人员必须在同步块中包含此对象/类的所有方法调用(我知道这可能用于近似此功能),因为它可能会导致如果忘记在同一个同步块中将所有来自myObject.use()的呼叫包裹到myObject.release(),则滥用该对象。

这可能吗?

可以使用ReentrantLock吗?

1 个答案:

答案 0 :(得分:1)

当然可以做到。 use()方法应该是同步的,因此一次只能调用一个线程,并将调用线程作为锁定线程存储在私有volatile变量中。所有调用 - 包括use() - 应首先检查是否存在存储的锁定线程并立即返回 - 或者如果您愿意则抛出异常 - 如果存在这样的线程并且它与调用线程不匹配。 release()也应该同步,并且可以删除存储的锁定线程,允许下一次调用use()来存储新的锁定线程。