java单例模式怎么释放资源

hongbowu 2011-11-03 05:22:55
RT
...全文
949 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
云归而-暝 2021-07-14
  • 打赏
  • 举报
回复

说释放没什么意义的不要在这误导别人。单例难以释放的原因在于单例池总是有引用。导致外面就算没引用了,也不会被垃圾回收。唯一的方法只能释放单例池。

meran 2011-11-08
  • 打赏
  • 举报
回复
这个问题是存在的。。。 设计模式启示录 里面谈了
飓风zj 2011-11-07
  • 打赏
  • 举报
回复
单利重在重复使用的,释放没什么意义啊

要是释放的话 就不要写成单利模式了
joyoowang 2011-11-07
  • 打赏
  • 举报
回复
在所有可能引起错误的地方加try{}catch{}并且加上finally{ 这里调用资源释放的方法 }
hongbowu 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mengxiangyue 的回复:]

在内部写个释放的方法 调用
[/Quote]

我也是这么想的,可是不知道这个在什么时候调用呢?因为是非正常退出
还有,当然也并不一定非得是单例,也可能换成别的写法,和单例的意思一样也行。
我想了几天也没有想到一个解决释放资源的办法。
hongbowu 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 leecyz 的回复:]

单例是静态的,设计的目的就是常用,释放做什么。在静态区GC不会回收。
[/Quote]

总有一次系统会非正常退出
hongbowu 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 devil26 的回复:]

引用 5 楼 hongbowu 的回复:

引用 2 楼 devil26 的回复:

有必要吗?


某些场合下非常有必要,比如文件读写不释放资源,可能把文件锁住了。

难以苟同!
摘自百科:“这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用”
试问你这可能把文件锁住了……
[/Quote]

知道吗,读一些数据库文件的时候,创建连接会把文件锁住
healer_kx 2011-11-07
  • 打赏
  • 举报
回复
楼主的脸还是很好记住的~
shaosijun2004 2011-11-04
  • 打赏
  • 举报
回复
我了个去,这种东西都这么纠结……
需要释放的时候 把资源释放了不就完了……
和单例多例有什么关系……
leecyz 2011-11-03
  • 打赏
  • 举报
回复
单例是静态的,设计的目的就是常用,释放做什么。在静态区GC不会回收。
healer_kx 2011-11-03
  • 打赏
  • 举报
回复
唉,脱离SSH都不会写代码了吧?
star_splendid 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hongbowu 的回复:]

引用 7 楼 jietoulangren 的回复:

手动释放吧,GC不可控
用单例一般都是紧缺资源,不用了赶紧释放


单例的目的就是控制资源。根本就不会释放, 所以跟释放就有矛盾。

但是在程序意外中止时,单例资源去没有释放
[/Quote]

感觉 单例不用去手动kill吧?
weiniyang 2011-11-03
  • 打赏
  • 举报
回复
释放资源,这个好像,单类不用吧,释放资源是释放内存,但是 java本身就提供了一些方法可以释放,程序员需手动释放的资源好像就是如流那样的。其他的释放要想编写手动的话,容易出问题吧。
healer_kx 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 leehomwong 的回复:]

不要的变量还什么的设为NULL么..流,数据库的不用就关了,释放资源是GC做的事
[/Quote]

。。。 。。。 。。。 。。。。
表示强烈的不解。
24K純帥 2011-11-03
  • 打赏
  • 举报
回复
不要的变量还什么的设为NULL么..流,数据库的不用就关了,释放资源是GC做的事
Devil26 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 healer_kx 的回复:]

引用 16 楼 devil26 的回复:

引用 15 楼 healer_kx 的回复:

一个对象(或者资源)放到全局,可以被谁访问到,或者以Context的方式传递着,可以被谁访问到,或者成为某个对象的成员或Reference,这个是访问性的问题。Singleton的本意是解决访问性的问题。

一个对象(或者资源),什么时候创建,什么时候释放,是一个生命周期的问题,当然了,和访问……
[/Quote]看来对你有误会,不纠结了!!!
healer_kx 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 devil26 的回复:]

引用 15 楼 healer_kx 的回复:

一个对象(或者资源)放到全局,可以被谁访问到,或者以Context的方式传递着,可以被谁访问到,或者成为某个对象的成员或Reference,这个是访问性的问题。Singleton的本意是解决访问性的问题。

一个对象(或者资源),什么时候创建,什么时候释放,是一个生命周期的问题,当然了,和访问性有些关系。
但是关系不大。(例如你要手工释放……
[/Quote]

你纠结在我说的,搞得你学习的Singleton模式不像是Singleton了吧?
Devil26 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 healer_kx 的回复:]

一个对象(或者资源)放到全局,可以被谁访问到,或者以Context的方式传递着,可以被谁访问到,或者成为某个对象的成员或Reference,这个是访问性的问题。Singleton的本意是解决访问性的问题。

一个对象(或者资源),什么时候创建,什么时候释放,是一个生命周期的问题,当然了,和访问性有些关系。
但是关系不大。(例如你要手工释放它的时候,你访问不到它,那你怎么释放啊?当然了,这不……
[/Quote]如果排除是单例模式的话,你说的确实是正确的,毫无疑问。
healer_kx 2011-11-03
  • 打赏
  • 举报
回复
一个对象(或者资源)放到全局,可以被谁访问到,或者以Context的方式传递着,可以被谁访问到,或者成为某个对象的成员或Reference,这个是访问性的问题。Singleton的本意是解决访问性的问题。

一个对象(或者资源),什么时候创建,什么时候释放,是一个生命周期的问题,当然了,和访问性有些关系。
但是关系不大。(例如你要手工释放它的时候,你访问不到它,那你怎么释放啊?当然了,这不是绝对的..)

我习惯把事情分解为基本上不相关的几个角度来看。

资源释放,1. 它和是不是Singleton其实没有关系。如果说有关系,就是我上面括号里面说的(是程序员访问它的close,还是系统GC访问它的close)


排除Singleton的影响,资源就是用完的时候关闭,没有别的了。

疯狂的驴子 2011-11-03
  • 打赏
  • 举报
回复
支持楼上的,不过,对于,单例资源,重在共享吧,不知道楼上的大侠,是否认同这种看法?
加载更多回复(13)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧