繁体   English   中英

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

[英]Is there a way to make an object usable only by the first thread that accesses a specific method?

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

我不想强迫开发人员必须在同步块中包含此对象/类的所有方法调用(我知道这可能用于近似此功能)因为如果他们忘记了这可能会导致滥用对象包裹从所有呼叫myObject.use()myObject.release()在相同的同步块中。

这可能吗?

可以用ReentrantLock完成吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM