SingleClientConnManager

SingleClientConnManager

我了解ThreadSafeClientConnManager使用连接池,并且当客户端需要连接时,从该连接池中选择一个连接。
相反,SingleClientConnManager仅使用一个连接。

我想了解的是:这是否也涉及安全性?我是否必须了解SingleClientConnManager不安全?

SingleClientConnManager文档页面上,我阅读:


  该管理器仅适用于单线程使用。


比我想答案是肯定的,但是我必须对此感到确定。

最佳答案

我不确定您指的是safe,但是这里是有关Thread safe概念的简要说明。

当您的代码中只有一个线程时,操作系统会不时在它们之间切换,并且在切换时您几乎“无法控制”。

假设global是全局对象,并且线程A执行以下操作:

//Thread A
global = 2;
Log.d("Thread A: ", global);


OS在上面的第一行和第二行之间从线程A切换到线程B:

//Thread B
global = 5;
Log.d("Thread B: ", global);


您会在日志中看到:

Thread B: 5;
Thread A: 5;


因为线程B覆盖了global上的值。

线程安全

线程安全代码是以防止上面显示的问题类型(使用同步块等)的方式编写的代码,可以从不同线程安全地调用而不会出现问题。

线程不安全,意味着如果您从不同的线程调用代码并且不够“幸运”,则在某个时间点,线程将以与上述类似的方式切换,并且程序将产生不可预测的结果。

如果您使用的是单线程,则它们都是安全的。在这种情况下,线程不安全是可取的,因为通常它更有效。

问候。

10-07 18:13