Android ThreadSafeClientConnManager和SingleClientConnManager之间的区别

Android ThreadSafeClientConnManager和SingleClientConnManager之间的区别,android,Android,我知道ThreadSafeClientConnManager使用一个连接池,当客户端需要连接时,从该连接中选择一个连接。 相反,SingleClientConnManager只使用一个连接 我想了解的是:这对安全性也有影响吗?我必须了解SingleClientConnManager是不安全的吗 在文档页上,我读到: 此管理器仅适用于单线程使用 我想答案是肯定的,但我必须确定这一点…我不确定您所指的安全,但这里有一个关于线程安全概念的快速解释 当你有一个包含多个线程的代码时,操作系统会时不时地在它

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

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

在文档页上,我读到:

此管理器仅适用于单线程使用


我想答案是肯定的,但我必须确定这一点…

我不确定您所指的
安全
,但这里有一个关于
线程安全
概念的快速解释

当你有一个包含多个线程的代码时,操作系统会时不时地在它们之间切换,而你“几乎”无法控制这种切换何时发生

假设
global
是一个全局对象,线程a执行以下操作:

//Thread A
global = 2;
Log.d("Thread A: ", global);
操作系统在上面的第一行和第二行之间从线程A切换到线程B:

//Thread B
global = 5;
Log.d("Thread B: ", global);
您将在日志中看到:

Thread B: 5;    
Thread A: 5;    
因为线程B超出了
全局
上的值

线程安全的

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

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

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


关于。

我不确定您所指的
safe
,但这里有一个关于
线程安全的概念的快速解释

当你有一个包含多个线程的代码时,操作系统会时不时地在它们之间切换,而你“几乎”无法控制这种切换何时发生

假设
global
是一个全局对象,线程a执行以下操作:

//Thread A
global = 2;
Log.d("Thread A: ", global);
操作系统在上面的第一行和第二行之间从线程A切换到线程B:

//Thread B
global = 5;
Log.d("Thread B: ", global);
您将在日志中看到:

Thread B: 5;    
Thread A: 5;    
因为线程B超出了
全局
上的值

线程安全的

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

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

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


关于。

我知道什么是安全性,但我不知道是否必须解释“此管理器仅适用于单线程使用”这一行。好像它说:在多线程应用程序中使用它不是线程安全的。“此管理器仅适用于单线程使用”的正确解释从多个线程使用它是不安全的
。如果您的应用程序是多线程的,但您从一个唯一的线程使用它就可以了。我知道什么是安全性,但我不知道是否必须解释“此管理器仅适用于单线程使用”这一行。好像它说:在多线程应用程序中使用它不是线程安全的“此管理器仅适用于单线程使用。
从多个线程使用它是不安全的
。如果您的应用程序是多线程的,但您从一个唯一的线程使用它则可以。