java父线程子线程
生活随笔
收集整理的這篇文章主要介紹了
java父线程子线程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?問:在父線程中New了一個子線程,想在停止父線程時也停止子線程,應(yīng)該怎么做?
答: 從某種程度上講,做不到。 ?? 不管是父線程還是子線程,這只不過是在運(yùn)行時誰建了誰時用的,一旦所謂的字線程被啟動,這兩個線程是沒有先后貴賤區(qū)分的。 ?? 任何線程是沒有辦法把另外一個線程終止的。 ?? 如果你一定想你說的那樣是線的話,下面是唯一個可行方案。在"父線程"建立“子線程”時,把“父線程”的instance傳過去,在“子線程”里,不停的check"父線程"是否還存活,如果否,停止。 ?? 相反的,如果"父線程"需要在"子線程"終了時結(jié)束,在"父線程"建立“子線程”時,留住“子線程”的instance然后keep ? checking ? whether ? it's ? still ? alive. ================================================================================ 只有在所有非守護(hù)進(jìn)程都停止的情況下,jvm才退出。main線程停止jvm也不一定退出: public class TestMitiThread { public static void main(String[] rags) { System.out.println(Thread.currentThread().getName() + " 線程運(yùn)行開始!"); new MitiSay("A").start(); new MitiSay("B").start(); System.out.println(Thread.currentThread().getName() + " 線程運(yùn)行結(jié)束!"); } } class MitiSay extends Thread { public MitiSay(String threadName) { super(threadName); } public void run() { System.out.println(getName() + " 線程運(yùn)行開始!"); for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { sleep((int) Math.random() * 10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(getName() + " 線程運(yùn)行結(jié)束!"); } } 運(yùn)行結(jié)果: main 線程運(yùn)行開始! main 線程運(yùn)行結(jié)束! A 線程運(yùn)行開始! 0 A 1 A B 線程運(yùn)行開始! 2 A 0 B 3 A 4 A 1 B 5 A 6 A 7 A 8 A 9 A A 線程運(yùn)行結(jié)束! 2 B 3 B 4 B 5 B 6 B 7 B 8 B 9 B B 線程運(yùn)行結(jié)束! =========================================== novice expertise inception rudiment prudent ... is the way to go ========================================= sas: sas variable must not be more than 8 characers use character variables sparingly--page 4轉(zhuǎn)載于:https://blog.51cto.com/vcycyv/316243
總結(jié)
以上是生活随笔為你收集整理的java父线程子线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS 2008 Feature Pack
- 下一篇: Android的应用程序结构分析:Hel