更新時(shí)間:2023-03-03 來源:黑馬程序員 瀏覽量:
在Java中,線程可以分為兩種類型:用戶線程和守護(hù)線程。用戶線程是主線程的子線程,當(dāng)主線程結(jié)束時(shí),用戶線程也會(huì)結(jié)束。守護(hù)線程是一種特殊的線程,它是在后臺(tái)運(yùn)行的,當(dāng)所有用戶線程結(jié)束時(shí),守護(hù)線程也會(huì)隨之結(jié)束。
下面是一個(gè)簡(jiǎn)單的代碼演示,用于說明Java中守護(hù)線程和用戶線程的區(qū)別:
public class ThreadDemo { public static void main(String[] args) { Thread userThread = new Thread(new Runnable() { public void run() { try { Thread.sleep(5000); System.out.println("用戶線程執(zhí)行完畢"); } catch (InterruptedException e) { e.printStackTrace(); } } }); userThread.start(); Thread daemonThread = new Thread(new Runnable() { public void run() { while (true) { System.out.println("守護(hù)線程正在運(yùn)行"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); daemonThread.setDaemon(true); daemonThread.start(); System.out.println("主線程執(zhí)行完畢"); } }
在這個(gè)例子中,我們創(chuàng)建了一個(gè)用戶線程和一個(gè)守護(hù)線程,并且在主線程中啟動(dòng)了它們。用戶線程將在5秒后打印一條消息,并退出。守護(hù)線程將在后臺(tái)無(wú)限循環(huán)打印一條消息,并且每隔1秒鐘暫停一次。
注意,我們使用setDaemon(true)方法將守護(hù)線程設(shè)置為守護(hù)線程,這意味著當(dāng)所有用戶線程退出時(shí),它也會(huì)退出。
運(yùn)行上面的代碼,我們將得到以下輸出:
從輸出結(jié)果可以看出,用戶線程在5秒后完成并退出,主線程也在啟動(dòng)用戶線程和守護(hù)線程后立即結(jié)束。但是,守護(hù)線程在后臺(tái)無(wú)限循環(huán)并打印消息,直到所有用戶線程都結(jié)束時(shí)才會(huì)退出。