java方法Thread.setDaemon(true)在C中是否等同于Thread.IsBackground=true?
我阅读了一些文档,我想知道这两个代码是否等效: 在JavaSE8中:java方法Thread.setDaemon(true)在C中是否等同于Thread.IsBackground=true?,java,c#,multithreading,Java,C#,Multithreading,我阅读了一些文档,我想知道这两个代码是否等效: 在JavaSE8中: Thread th1 = new Thread(() -> { doStuff(); }); th1.setDaemon(true); th1.start(); 在C中: 我已经阅读了MSDN文档,但我想知道,从框架的角度来看,它们是等效的:垃圾收集、终结器、内存管理等等。 在这两种情况下:th1在其父线程死亡后以相同的方式死亡 MSDN提到了一个进程,但Oracle提到了JVM本身。这就是让我困惑的地方
Thread th1 = new Thread(() -> { doStuff(); });
th1.setDaemon(true);
th1.start();
在C中:
我已经阅读了MSDN文档,但我想知道,从框架的角度来看,它们是等效的:垃圾收集、终结器、内存管理等等。
在这两种情况下:th1在其父线程死亡后以相同的方式死亡
MSDN提到了一个进程,但Oracle提到了JVM本身。这就是让我困惑的地方。是的,它们是等价的 线程可以是背景线程,也可以是前景线程。 背景线程与前景线程相同,只是 后台线程不阻止进程终止。一劳永逸 属于进程的前台线程已终止,公共 语言运行库结束该过程。任何剩余的后台线程 已停止且未完成
@南巴里:是的,我读了很多,我想我需要编辑我的问题,JVM本身就是一个过程。每种编程语言都使用自己的术语和体系结构,不要逐字比较…在其父线程死后?。。。我不了解.NET,但在Java中,线程之间没有父/子关系。如果线程P创建了线程C,这可能对应用程序有意义,但对JVM没有任何意义。@james large:oops,正如Nambari所说:这完全是行话。在.Net中,通常说线程P是父线程,线程C是子线程。我发现了这个有趣的信息
Thread th1 = new Thread(doStuff);
th1.IsBackground = true;
th1.Start();