不是在实例化期间,但是一旦完成单例对象的实例化,如果两个或多个线程试图访问同一个单例对象会发生什么?特别是在单例对象需要大量时间来处理请求的情况下(例如1分钟)......在这种情况下,如果例如5个线程尝试访问同一个单例对象,结果会是什么?
附加问题:通常我们何时应该采用单身模式,何时应该避免使用?
除非在Singleton中执行同步(锁定),否则答案是:它是一个免费的.
尽管Singleton确保在请求时仅使用对象的一个实例,但该模式本身并不提供任何形式的线程安全性.这取决于实施者.
在您引用的特定情况下(使用长时间运行的方法),将访问同步到使用类或对象级变量的任何方法是至关重要的.如果不这样做,很可能会导致竞争条件.
祝好运!