退出所有線程
⑴ C#關閉全部線程
啟動時,將線程放入一個列表集合回答中
List<Thread>threadList=newList<Thread>();
for(inti=0;i<intClientIpQty;i++)
{
t=newThread(newThreadStart(Listen));
t.IsBackground=true;
threadList.Add(t);
t.Start();
}
關閉集合
foreach(ThreadtinThreadList)
{
t.Join();
}
⑵ C#線程關閉程序結束所有線程
如果是你自己寫的程序,你只要新建線程的時候,全都吧線程的IsBackGround屬性賦值為true
主窗口關閉所有線程就都退出了
如果是別人的程序,你只要直接用kill命令殺掉進程,他所有線程就都退了
⑶ 線程應當如何正常退出
終止線程的三種方法
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
2. 使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend、resume一樣,也可能發生不可預料的結果)。
3. 使用interrupt方法中斷線程。
使用退出標志終止線程 :
當run方法執行完後,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主線程延遲5秒
thread.exit = true; // 終止線程thread
thread.join();
System.out.println("線程退出!");
}
}
在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,
2. 使用stop方法終止線程
使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程:
thread.stop();
雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,並不推薦使用stop方法來終止線程。
3. 使用interrupt方法終止線程
使用interrupt方法來終端線程可分為兩種情況:
(1)線程處於阻塞狀態,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}來判斷線程是否被中斷。
在第一種情況下使用interrupt方法,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出。下面的代碼演示了在第一種情況下使用interrupt方法。
package chapter2;
public class ThreadInterrupt extends Thread
{
public void run()
{
try
{
sleep(50000); // 延遲50秒
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception
{
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("在50秒之內按任意鍵中斷線程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("線程已經退出!");
}
}
上面代碼的運行結果如下:
在50秒之內按任意鍵中斷線程!
sleep interrupted
線程已經退出!
在調用interrupt方法後, sleep方法拋出異常,然後輸出錯誤信息:sleep interrupted.
注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止。一個是靜態的方法interrupted(),一個是非靜態的方法isInterrupted(),這兩個方法的區別是interrupted用來判斷當前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。因此,while (!isInterrupted())也可以換成while (!Thread.interrupted())。
⑷ c#關閉窗口怎麼強制退出所有運行的線程
將線程的isbauckground設置為true
當住線程關閉時(也就是推出程序時),其他線程將自動關閉
⑸ C# 線程關閉程序結束所有線程
最好記錄下你所有開啟的線程,當結束的時候結束這些線程。這樣還可以有機會比較優雅的結束內線程。
一般容來說 從入口函數main函數退出後進程就結束了。進程結束,默認的後台線程就結果了,所以將你的線程都標記為後台線程就可以了。
最後可以試試Environment.Exit吧。
⑹ 如何關閉線程
關閉線程有幾種方法, 一種是調用它裡面的stop()方法 另一種就是你自己設置一個停止線程的標記 (推薦這種) 代碼如下: package com.demo; //測試Thread的stop方法和自己編寫一個停止標記來停止線程; public class StopThread implements Runnable{ //停止線程的標記值boolean; private boolean flag = true; public void stopThread(){ flag = false; } public void run(){ int i=0; while(flag){ i++; System.out.println(Thread.currentThread().getName()+":"+i); try{ Thread.sleep(1000); }catch(Exception e){ } System.out.println(Thread.currentThread().getName()+"==>"+i); } } public static void main(String args[]){ StopThread st = new StopThread(); Thread th = new Thread(st); Thread th1 = new Thread(st); th.start(); th1.start(); try{ Thread.sleep(5500); }catch(Exception e){ } /* 如果使用Thread.stop方法停止線程,不能保證這個線程是否完整的運行完成一次 run方法;但是如果使用停止的標記位,那麼可以保正在真正停止之前完整的運行完 成一次run方法; */ th.stop(); st.stopThread(); } }
⑺ 退出線程的幾種方法
終止線程的三種方法
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
2. 使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend、resume一樣,也可能發生不可預料的結果)。
3. 使用interrupt方法中斷線程。
1. 使用退出標志終止線程
當run方法執行完後,線程就會退出。但有時run方法是永遠不會結束的。如在服務端程序中使用線程進行監聽客戶端請求,或是其他的需要循環處理的任務。在這種情況下,一般是將這些任務放在一個循環中,如while循環。如果想讓循環永遠運行下去,可以使用while(true){……}來處理。但要想使while循環在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。下面給出了一個利用退出標志終止線程的例子。
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主線程延遲5秒
thread.exit = true; // 終止線程thread
thread.join();
System.out.println("線程退出!");
}
}
在上面代碼中定義了一個退出標志exit,當exit為true時,while循環退出,exit的默認值為false.在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,
2. 使用stop方法終止線程
使用stop方法可以強行終止正在運行或掛起的線程。我們可以使用如下的代碼來終止線程:
thread.stop();
雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,因此,並不推薦使用stop方法來終止線程。
3. 使用interrupt方法終止線程
使用interrupt方法來終端線程可分為兩種情況:
(1)線程處於阻塞狀態,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}來判斷線程是否被中斷。
在第一種情況下使用interrupt方法,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出。下面的代碼演示了在第一種情況下使用interrupt方法。
package chapter2;
public class ThreadInterrupt extends Thread
{
public void run()
{
try
{
sleep(50000); // 延遲50秒
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception
{
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("在50秒之內按任意鍵中斷線程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("線程已經退出!");
}
}
上面代碼的運行結果如下:
在50秒之內按任意鍵中斷線程!
sleep interrupted
線程已經退出!
在調用interrupt方法後, sleep方法拋出異常,然後輸出錯誤信息:sleep interrupted.
注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止。一個是靜態的方法interrupted(),一個是非靜態的方法isInterrupted(),這兩個方法的區別是interrupted用來判斷當前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。因此,while (!isInterrupted())也可以換成while (!Thread.interrupted())。
⑻ 如何安全退出線程
問題都沒說清楚,我就假定你是win32程序了。
單線程的話,你釋放完所有申請的內存,關閉打開的文件,直接返回就可以退出了。
多線程的話,主線程退出前要確認所有子線程是否都退出了,要不主線程先行退出的話,
會導致子線程還沒來得及釋放資源,甚至退出的時候會導致崩潰。