我想知道调用构造函数是否会阻塞程序中的其他线程?我正在查看并发报告并发现一个长线程阻塞其他线程,它的堆栈总是有一个构造函数。
修改
经过调查,我发现锁是因为来自另一个请求的DB调用而发生的(我运行了一个ASP.NET应用程序)。
对于这个问题,正如我在article中发现的那样,内存分配不会阻塞线程,除非调用GC,正如Servy所指出的那样。
答案 0 :(得分:3)
不,它没有。这个特定的构造函数可能正在做一些导致其他线程阻塞的东西,但是调用构造函数的行为本身并不会阻塞所有其他线程。
您可能会注意到的一件事是,垃圾收集器确实需要在运行时阻止所有线程的执行。如果你有一个分配批次和大量对象的线程,那么它导致GC集合超出了预期的范围,那么你可能会在很长一段时间内阻塞你的线程。
答案 1 :(得分:0)
一切都取决于具体情境。构造函数只是另一种方法,具有为您的实例构造(分配内存)的特殊任务。你可以在里面构建对象 另一个线程,或构造函数中的块线程,但它与构造函数本身无关。阻止是关于程序的流程。