我有一个sinlgeton对象,它拥有一个方法,不同步。单个用户可以一次访问单例 - 如果多个客户端访问该对象会发生什么?是否会以先来先服务的方式提供对象引用...也就是说,一个客户端是否必须等待第一个完成对象,或者它将在内存中被赋予相同的对象引用? / p>
我对单例中未同步的方法感到奇怪。如果2个客户端使用不同的参数调用Singleton.method(param) - 它们不会为彼此创建问题吗?
答案 0 :(得分:7)
如果您的方法不使用任何共享状态(例如单例字段),则这是完全安全的。方法参数在线程堆栈上传递 - 这是本地的并且是堆栈专用的。
考虑两个运行相同代码但在内存中不同区域运行的处理器。
答案 1 :(得分:3)
Singleton意味着应该只有一个类的实例。嗯,如果没有正确实施单身人士,这可能不是真的。拥有单身人士最安全的方法是将其声明为enum
。
如果某个方法未同步,则表示多个线程可以同时执行该方法的主体。如果单身是不可变的那么就不用担心了。否则你应该注意可能的不一致。一个线程可以更改状态,而另一个线程执行相同操作会导致无法预测的结果,很难调试。