首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何安全和及时地使用Java处理稀缺的共享资源?

如何安全和及时地使用Java处理稀缺的共享资源?
EN

Stack Overflow用户
提问于 2014-05-17 18:40:34
回答 6查看 223关注 0票数 0

在并行应用程序中,线程组中的线程(32)使用共享的、非托管的和独立的一次性对象。

我们的c/c++应用程序中也有相同的东西,我使用shared_ptr<>来让对象在不需要对象之后进行处理和完成。

我只是尝试在Java中应用相同的东西,然后我面对了finalize()方法。但是也存在一些问题,因为GC有时太懒,对象甚至不能被识别为无法处理/完成的对象,有时被调用,但是没有保证GC允许对象完全调用finalize()

因此,我提出了另一个复杂的解决方案,我只是数数和跟踪线程使用的对象,但它也不工作,但我知道这不是一个可靠的解决方案,我知道我会面临意想不到的结果。

我只是想知道在java中是否存在类似于shared_ptr<>的东西,还是可以通过JNI来处理对象?

有什么想法吗?

EN

Stack Overflow用户

发布于 2014-05-17 19:11:24

您可以创建一个简单的manager对象,它知道如何创建和处理所述资源。在对象上实现同步的checkout()checkin()方法。签出方法在第一次调用时创建对象,增加引用计数,并返回对对象的引用。签入方法会减少引用计数,当它变为零时,它会处理该对象。然后,您只需使用try/finally模式(类似于锁/解锁)对对象的所有使用范围进行范围:

代码语言:javascript
运行
复制
Resource res = manager.checkout();
try {
  // ... work with resource here ...
} finally {
  manager.checkin(res);
}

注意,使用java 7 AutoCloseable可能会使它变得更干净一些。

票数 2
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23714853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档