java 子线程退出_java – 在子线程完成执行之前主线程将退出吗?
我讀了2篇文章
在上面的文章中,在“線程終止”段中,它在Red中聲明“如果父線程終止,它的所有子線程也會終止”.
在上面的文章中,該頁面的最后一行指出“main()方法執行可以完成,但程序將繼續運行,直到所有線程完成其執行.”
我付費他們是矛盾的.如果我錯了,請專家指正.
在我的程序中,使用Main方法的程序調用2個線程的構造函數.在各個線程的構造函數中,我有start()方法.
TestA A = new TestA("TestA");
TestB B = new TestB("TestB");
public TestA(String name) {
System.out.println(name);
t = new Thread(this);
t.start();
}
我想知道會發生什么,主線程在子線程完成執行之前終止?如果是這樣,孩子仍然會線程,繼續執行?
我嘗試運行該程序,有時候即使主線程退出,所有子線程也會完成執行.
在2個線程中,我正在處理一些文件.在testA線程A中,單獨的1個文件有時沒有得到處理.但很多時候,所有的文件都得到處理,我沒有任何問題.
解決方法:
Java區分用戶線程和另一種稱為守護程序線程的線程.這兩種類型的線程之間的區別在于,如果JVM確定應用程序中運行的唯一線程是守護程序線程(即,沒有用戶線程),則Java運行時會關閉應用程序.另一方面,如果至少有一個用戶線程處于活動狀態,則Java運行時將不會終止您的應用程序.
當main()方法最初從Java運行時接收控制時,它將在用戶線程的上下文中執行.只要主方法線程或任何其他用戶線程保持活動狀態,您的應用程序將繼續執行.
在您的情況下,線程是用戶線程,因此允許在主線程退出之前完成.
i am processing some files. in testA thread A alone, 1 file alone is
not getting processed some times. but many times
上述原因可能是除了線程退出之外的其他原因.它可能是文件鎖,同步問題等.
When a Java Virtual Machine starts up, there is usually a single
non-daemon thread (which typically calls the method named main of some
designated class). The Java Virtual Machine continues to execute
threads until either of the following occurs:
The exit method of class Runtime has been called and the security
manager has permitted the exit operation to take place. All threads
that are not daemon threads have died, either by returning from the
call to the run method or by throwing an exception that propagates
beyond the run method.
標簽:java
來源: https://codeday.me/bug/20190923/1815754.html
總結
以上是生活随笔為你收集整理的java 子线程退出_java – 在子线程完成执行之前主线程将退出吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis的可视化工具有哪些
- 下一篇: java中compile函数用法_【转】