Xamarin - Java.Lang.Thread和System.Threading.Thread哪个更好?

3
在我最近参与的一个Xamarin项目中,我发现开发人员既使用了Java.Lang.Thread,也使用了System.Threading.Thread(用于非常相似的操作,例如在后台加载数据)。
我想知道在Xamarin项目中使用Java.Lang.Thread的原因是什么,因为Thread类继承自IDisposable,所以必须确保它被正确释放(这意味着需要额外的代码)。
在Xamarin生态系统中,哪种方法表现更好?它们基本上是可以互换的吗?

我不理解为什么要点踩。如果你点踩,就应该能够解释清楚原因。 - Jakub Holovsky
我不是Xamarin的专家,但我认为它们应该是相同的,因为C#代码最终被翻译成Java。 - Sweeper
1
@Sweeper,那是错误的说法,C#(或F#,...)代码并没有被翻译成Java,它是基于IL的,并在包装成Android NDK应用程序的Mono运行时中运行。Java ART VM通过桥接方式提供,因此您可以访问Android Java SDK。 - SushiHangover
@SushiHangover 抱歉!我不太了解Xamarin! - Sweeper
4
@Sweeper NP,只是不希望有人认为正在进行某种类型的转译操作。使用 Xamarin.Android 技术栈确实有两个虚拟机可用,即 .Net/Mono/CIL 和 Java/Dalvik/ART,您基于 .Net 的代码可以调用 Android 的 Java 端并尽可能透明地使用这些功能。 - SushiHangover
1个回答

2
我想提一下,System.Threading.Thread 派生自 CriticalFinalizerObject,这是标准 Microsoft 可处置模式 的一个安全实现:

确保派生类中的所有终结代码都被标记为关键。

Java.Lang.Thread 仅实现 IDisposable 接口,与之不同的另一个区别是,它们在定义上略有不同。 让我们来看一下文档:

Java.Lang.Thread 类: 一个线程是一个并发执行的单元。它有自己的调用堆栈,用于被调用的方法、它们的参数和局部变量。每个应用程序在启动时都至少有一个线程运行,即主线程,在主 ThreadGroup 中。运行时将其自己的线程保留在系统线程组中。 链接的文章指出,线程组的使用被认为已经过时。 System.Threading.Thread 类 一个进程可以创建一个或多个线程来执行与该进程关联的程序代码的一部分。使用 ThreadStart 委托或 ParameterizedThreadStart 委托来指定线程执行的程序代码。ParameterizedThreadStart 委托允许您向线程过程传递数据。

也来自_Thread

向非托管代码公开Thread类。

此接口用于从非托管代码访问托管类,不应从托管代码调用。 所以,我可以看出,Java中的线程是JVM内部的逻辑结构,而C#中的线程是一种未经管理的消耗资源的东西。我建议您测量一下一个实现和另一个实现的资源,并根据情况决定使用哪个类。
如果您的代码大多基于.NET方面,我建议使用CLR实现。否则,我认为您应该使用JVM实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接