我想知道调用构造函数是否会阻塞程序中的其他线程?我正在查看并发报告,发现一个长线程阻塞了其他线程,并且它的堆栈中总是有一个构造函数。
编辑:
经过调查,我发现锁定是由于另一个请求(我运行了一个 ASP.NET 应用程序)的 DB 调用而发生的。
对于这个问题,正如我在本文中发现的那样,内存分配不会阻塞线程,除非调用 GC,正如 Servy 指出的那样。
我想知道调用构造函数是否会阻塞程序中的其他线程?我正在查看并发报告,发现一个长线程阻塞了其他线程,并且它的堆栈中总是有一个构造函数。
编辑:
经过调查,我发现锁定是由于另一个请求(我运行了一个 ASP.NET 应用程序)的 DB 调用而发生的。
对于这个问题,正如我在本文中发现的那样,内存分配不会阻塞线程,除非调用 GC,正如 Servy 指出的那样。
不,不是的。这个特定的构造函数可能正在做一些导致其他线程阻塞的事情,但是调用构造函数的行为本身并不会阻塞所有其他线程。
您可能注意到的一件事是垃圾收集器在运行时确实需要阻止所有线程的执行。如果您有一个线程正在分配大量对象,以至于它导致 GC 收集超出预期,您可能会在明显的时间段内阻塞您的线程。
一切都取决于具体的上下文。构造函数只是另一种方法,具有为您的实例构造(分配内存)的特殊职责。您可以在另一个线程中构造对象,也可以在构造函数中阻塞线程,但这与构造函数本身无关。阻塞是关于你的程序的流程。