ThreadSafeClientConnManager和SingleClientConnManager之间的区别

时间:2012-11-26 18:22:43

标签: android

据我所知,ThreadSafeClientConnManager使用连接池,当客户端需要连接时,从中选择一个连接。 相反,SingleClientConnManager只使用一个连接。

我想要了解的是:这对安全性有影响吗?我是否必须了解SingleClientConnManager是否不安全?

SingleClientConnManager文档页面上,我读到了:

  

这个经理只适合单线程使用。

我认为答案是肯定的,但我必须确定这一点......

1 个答案:

答案 0 :(得分:1)

我不确定你所引用的是什么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上的值。

线程安全

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

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

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

问候。