论坛首页 Java企业应用论坛

这样的话都能创造:“单例的方法的话会阻塞的”

浏览 27835 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (2) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-06-07   最后修改:2011-06-07
也有一种可能是楼主没理解透他们的意思。

单例容易造成应用热点,这点不用怀疑吧?

如果这个热点(单例)还带可更改的状态,那么对状态的访问势必引入并发控制。

一个需要并发控制的热点,因其访问竞争问题,大多数情况下会成为性能杀手(热点阻塞)。

加上他们思维跳跃太快,于是就变成单例 - > 阻塞了。

呵呵,只是想说不要把别人想得太傻,一些人能混得下来必然有他的亮点。
0 请登录后投票
   发表时间:2011-06-07  
xfei6868 写道
    今天听小组的几个负责人讨论的时候,听到了这样一句话,“你的类是单例的,我调用其中的方法的话会阻塞的。”。几个人讨论的十分热烈,非常的正式。小鸟本人也不好在其中插嘴,一个各方面能力不受认可的人随便插嘴可能更会引来围攻和记很。名牌大学研究生和工作好多年的高手就这这样热烈的讨论着。

    经常逛iteye还没见过有人说过这样的说法,阻塞不阻塞是是不是同步的问题,没听说过跟单例有什么关系。就算多线程,一般单例类肯定要保证线程安全的,而且方法本身是线程安全的(非可变类)。
   
    来的时候问会不会多线程和socket,说没做过这样的项目,他们很看不起!当时认为一个个应该都是牛人,觉得有东西可以研究了,现在看到多线程的代码中这样的实现。

1.实现单例懒汉模式时根本不加锁,在多线程环境下就算加锁都会出问题的模式他们居然就这么简单实现了。

2.多线程中很多判断list的size是否为0的判断,再操作,这样同样不判断取出来对象是否为null的话一样会出错。

3.多线程中使用计数器,还用普通的i++这样,不知道有原子库吗?

    失望!这么好的学校,这么高的工资,貌似很好的口才,而且很重要的项目。

    慢慢走,慢慢看,何时能言,何时能坦言。


引用
“你的类是单例的,我调用其中的方法的话会阻塞的。”。几个人讨论的十分热烈,非常的正式。

1.方法加了同步sychronized,当然会阻塞其它的线程,这个有什么疑问吗?我觉得人家讨论的没有错。是不是你理解阻塞这个词有偏差?
一般的singleton lazy load,简单在方法上加同步标识,自然会阻塞,性能不高。他们谈论的可能是优化单例方法,比如可以采用volatile+double checked的机制,这个很正常呀,有什么好大惊小怪的。
2.null的话,自然会抛出runtime exception.而list size是否为0,更应该是一种业务异常。如果说采用aop拦截,这些都是可行的。要看你们拍板的人怎么定义异常架构和处理机制了。
3.那没有原子库之前,大家都是怎么写的?用i++怎么不行了?只要人家能保证线程安全。不能说你用了最新的东西,就是最好的吧,毕竟原来有很多遗留系统,要通盘考虑的。

本来不想说的,又废话了几句。你现在应该是多和大家沟通,了解别人的想法,如果真有不足,就提出来,不要怕被bs.如果你很断定他们是错的,就说出来。人总是在bs中成长起来的。

0 请登录后投票
   发表时间:2011-06-07  
要理解,说那么多话总有出错的时候,事实上开发出一个好项目确实不一定要非常好的基础的,相反其他能力很重要
0 请登录后投票
   发表时间:2011-06-07  
AlwenS 写道
也有一种可能是楼主没理解透他们的意思。

单例容易造成应用热点,这点不用怀疑吧?

如果这个热点(单例)还带可更改的状态,那么对状态的访问势必引入并发控制。

一个需要并发控制的热点,因其访问竞争问题,大多数情况下会成为性能杀手(热点阻塞)。

加上他们思维跳跃太快,于是就变成单例 - > 阻塞了。

呵呵,只是想说不要把别人想得太傻,一些人能混得下来必然有他的亮点。


看了您的回复,还是没看到单例跟阻塞有什么关系.
你拉扯了一大堆的关联,可能行.

说到底还是看这个对象是可变的还是非可变的。

单例只是一定范围内只有一个对象,而不用单例照样存在一个对象被多线程使用的情况,是可变对象话照样是需要考虑线程安全的。
0 请登录后投票
   发表时间:2011-06-07  
Pro_sky 写道
要理解,说那么多话总有出错的时候,事实上开发出一个好项目确实不一定要非常好的基础的,相反其他能力很重要


我相信,这成不了一个好的项目。
倒是有可能成就一个项目经理。
因为 这个项目变烂的时候 ,这个项目经理已经远走到更有前途的项目了。

就算项目有问题,加班不就行了,找原因还是咱这小弟的事情。
很多项目经理面试的时候都问对加班有什么看法,其实最内心的话是:“加班就是管理者无能造成的!”
0 请登录后投票
   发表时间:2011-06-07  
sky_dream 写道
  单例的多线程同步,建议你看看这篇文章吧 http://freish.iteye.com/blog/1008304

想请教一下,单例的多线程跟非单例有什么不同。(在多线程环境中)
0 请登录后投票
   发表时间:2011-06-07  
xfei6868 写道
AlwenS 写道
也有一种可能是楼主没理解透他们的意思。

单例容易造成应用热点,这点不用怀疑吧?

如果这个热点(单例)还带可更改的状态,那么对状态的访问势必引入并发控制。

一个需要并发控制的热点,因其访问竞争问题,大多数情况下会成为性能杀手(热点阻塞)。

加上他们思维跳跃太快,于是就变成单例 - > 阻塞了。

呵呵,只是想说不要把别人想得太傻,一些人能混得下来必然有他的亮点。


看了您的回复,还是没看到单例跟阻塞有什么关系.
你拉扯了一大堆的关联,可能行.

说到底还是看这个对象是可变的还是非可变的。

单例只是一定范围内只有一个对象,而不用单例照样存在一个对象被多线程使用的情况,是可变对象话照样是需要考虑线程安全的。


你没理解我的意思。
如果你我无法在"单例容易造成热点"这个论点上达成共识,那么其它的就不用多说了。
0 请登录后投票
   发表时间:2011-06-07  
xfei6868 写道
AlwenS 写道
也有一种可能是楼主没理解透他们的意思。

单例容易造成应用热点,这点不用怀疑吧?

如果这个热点(单例)还带可更改的状态,那么对状态的访问势必引入并发控制。

一个需要并发控制的热点,因其访问竞争问题,大多数情况下会成为性能杀手(热点阻塞)。

加上他们思维跳跃太快,于是就变成单例 - > 阻塞了。

呵呵,只是想说不要把别人想得太傻,一些人能混得下来必然有他的亮点。


看了您的回复,还是没看到单例跟阻塞有什么关系.
你拉扯了一大堆的关联,可能行.

说到底还是看这个对象是可变的还是非可变的。

单例只是一定范围内只有一个对象,而不用单例照样存在一个对象被多线程使用的情况,是可变对象话照样是需要考虑线程安全的。

AlwenS说的没错,如果是可变对象,在改变状态的方法上会引入并发控制,通常是synchronized方法,因为只有一个对象,同时访问synchronized方法时当然会阻塞。

如果是不可变对象,那就不需要考虑并发控制了,也不会引起性能问题。
0 请登录后投票
   发表时间:2011-06-07  
AlwenS 写道
xfei6868 写道
AlwenS 写道
也有一种可能是楼主没理解透他们的意思。

单例容易造成应用热点,这点不用怀疑吧?

如果这个热点(单例)还带可更改的状态,那么对状态的访问势必引入并发控制。

一个需要并发控制的热点,因其访问竞争问题,大多数情况下会成为性能杀手(热点阻塞)。

加上他们思维跳跃太快,于是就变成单例 - > 阻塞了。

呵呵,只是想说不要把别人想得太傻,一些人能混得下来必然有他的亮点。


看了您的回复,还是没看到单例跟阻塞有什么关系.
你拉扯了一大堆的关联,可能行.

说到底还是看这个对象是可变的还是非可变的。

单例只是一定范围内只有一个对象,而不用单例照样存在一个对象被多线程使用的情况,是可变对象话照样是需要考虑线程安全的。


你没理解我的意思。
如果你我无法在"单例容易造成热点"这个论点上达成共识,那么其它的就不用多说了。


我是能理解你的意思,但是我不喜欢你“热点”的说法,和“容易”的形容。

我认为的计算机的东西是什么样的就是什么样的,对就是对,错就是错,很简单运行出来。

如果jdk的设计人员,都在应该不会出问题的地方就不这样做,或那样做,能做出来这么多人使用的类库吗?

当然 我觉得自己也有很多东西不懂,需要学习,但是自己不会随意的创造想当然的说法。

比如 他们今天又说了一个不含有任何非局部变量的方法应该加锁的问题,又在想象多线程怎么怎么的运行。

我只能静静的,静静的,默默的实现着别人的空方法,一层层的“框架”,所谓的“解耦”,不断修改接口后的修改,还能怎么样呢?
0 请登录后投票
   发表时间:2011-06-07  
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

如果不涉及到共享资源的访问,单例为何还需要枷锁?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics