我了解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
上的值。线程安全
线程安全代码是以防止上面显示的问题类型(使用同步块等)的方式编写的代码,可以从不同线程安全地调用而不会出现问题。
线程不安全,意味着如果您从不同的线程调用代码并且不够“幸运”,则在某个时间点,线程将以与上述类似的方式切换,并且程序将产生不可预测的结果。
如果您使用的是单线程,则它们都是安全的。在这种情况下,线程不安全是可取的,因为通常它更有效。
问候。