我抽象了一个连接管理类, ConnectionManager, 主题类TopicManager,可能还有更多.
就拿这个TopicManager来说, 我的程序主要就是用发布订阅的模式实现通讯, 也就是TopicManager的访问读取会非常频繁. 因为是单例的, 我肯定要做线程同步处理, 这样在多线程下对性能的影响有多大了?
相比之下, 我如果取消TopicManager这个类, 直接对数据库操作, 通过c3p0连接池, 以上两种方法相比, 哪种开销更大.
多谢各位.
シングルトンとマルチスレッドはまったく関連のない分野ですが、シングルトンはオブジェクトの制御の問題を解決し、マルチスレッドはマルチコア プロセッサの機能を最大限に活用するという問題を解決します。 データ共有が発生する場合にのみシングルトンを同期する必要があるという意味ではありません。したがって、シングルトンを使用しない場合でも、同じ方法で同期する必要があります。シングルトンを使用する場合でも、リソース共有が発生しない場合は同期は必要ありません。
実際的な例: ここでシングルトンがありますが、シングルトン メソッドは静的オブジェクトを使用しません。つまり、リソース共有がないため、同期は必要ありません。
個人的な理解: マルチスレッドを考慮する場合は、シングルトンをロックする必要があり、ビジネスの状況によっては、threadLocal の使用を検討することもできます。
単一のケースは読み取り専用です。 。影響はありません。 。
シングルトンとマルチスレッドはまったく関連のない分野ですが、シングルトンはオブジェクトの制御の問題を解決し、マルチスレッドはマルチコア プロセッサの機能を最大限に活用するという問題を解決します。
データ共有が発生する場合にのみシングルトンを同期する必要があるという意味ではありません。したがって、シングルトンを使用しない場合でも、同じ方法で同期する必要があります。シングルトンを使用する場合でも、リソース共有が発生しない場合は同期は必要ありません。
実際的な例:
ここでシングルトンがありますが、シングルトン メソッドは静的オブジェクトを使用しません。つまり、リソース共有がないため、同期は必要ありません。
個人的な理解: マルチスレッドを考慮する場合は、シングルトンをロックする必要があり、ビジネスの状況によっては、threadLocal の使用を検討することもできます。
単一のケースは読み取り専用です。 。影響はありません。 。